matlab上的旧gcc编译器
Posted
技术标签:
【中文标题】matlab上的旧gcc编译器【英文标题】:Old gcc compiler on matlab 【发布时间】:2014-10-24 09:31:21 【问题描述】:我在 Linux MINT 上使用 MATLAB。我有一个 C 程序,我想使用 mex 命令,如下所示:
mex /home/.../binary.c -output binary_m
但我收到以下错误
Warning: You are using gcc version "4.8.1-10ubuntu9)". The version
currently supported with MEX is "4.4.6".
For a list of currently supported compilers see:
http://www.mathworks.com/support/compilers/current_release/
/home/.../binary.c:43:19: fatal error: binary.h: No such file or directory
#include "binary.h"
^
compilation terminated.
mex: compile of ' "/home/.../binary.c"' failed.
我认为我必须降级 MATLAB 上的 gcc 编译器,但我不知道如何。
任何帮助都将不胜感激。 问候
【问题讨论】:
检查您是否可以编译示例文件之一(例如yprime.c
)。警告不应停止执行(您可以随时将其关闭),因此这可能是两件不同的事情 - 关于编译器版本的警告和错误 - 可能是因为 binary.h
不在 MATLAB 路径上。
谢谢。我还放了标题(binary.h),但关于 gcc 版本的以下错误仍然是警告:您使用的是 gcc 版本“4.8.1-10ubuntu9)”。 MEX 当前支持的版本是“4.4.6”。有关当前支持的编译器的列表,请参见:mathworks.com/support/compilers/current_release /home/.../binary.c:在函数“mexFunction”中:/home/.../binary.c:139:9:警告:来自不兼容指针的赋值type [默认启用] msg = (unsigned char **)mxGetPr(prhs[0]); ^
您必须区分警告和错误。警告只是通知您可能存在的问题 - 在这种情况下,您的编译器版本比 MATLAB 支持的版本新,因此可能存在一些问题,因为他们没有测试它(或者它可能很好,当然)。跨度>
【参考方案1】:
这与编译器版本的警告无关;不注意那个,你会没事的。您可能在尝试编译 c++11
源代码时遇到问题,具体取决于您的 Matlab 版本、编译器版本和 mex 命令标志,但这不是您的情况。
这是问题所在:您的 C 程序 binary.c
包含文件 binary.h
的 #include
语句,Matlab 找不到该语句(尽管我相信您将它与 C 文件放在同一目录中?)因为包含 C 源代码的目录不在 Matlab 路径中。
要解决此问题,只需将目录更改为binary.c
所在的位置,然后将您的文件在那里混合。您可以自动执行以下操作:
source_dir = '/home/.../';
current_dir = fileparts(mfilename('fullpath'));
cd source_dir;
% do something
cd current_dir;
【讨论】:
谢谢。我还放了标题(binary.h),但关于 gcc 版本的以下错误仍然是警告:您使用的是 gcc 版本“4.8.1-10ubuntu9)”。 MEX 当前支持的版本是“4.4.6”。有关当前支持的编译器的列表,请参见:mathworks.com/support/compilers/current_release /home/.../binary.c:在函数“mexFunction”中:/home/.../binary.c:139:9:警告:来自不兼容指针类型的赋值 [默认启用] msg = (unsigned char **)mxGetPr(prhs[0]); ^ 您到底是如何怀疑该消息中的版本冲突?mxGetPr
的输出类型是什么?提示:mathworks.co.uk/help/matlab/apiref/mxgetpr.html。编译器会因为您编写的内容而不是因为版本冲突而引发警告。
实际上,我有一个 C 文件和 mex 文件,但它的 mex 文件是在 Windows 64 和 32 中创建的。所以它们在 Linux 中不起作用。这就是为什么 1- 我 100% 确定 C 代码没问题 2- 我想在 Linux 中创建 mex 文件 3- 问题与 MATLAB 上的编译器有关
好的,让我们这样做:使用最少的问题代码发布一个新问题,只需一个简单的 C-mex 文件,您可以在其中提取输入,并引发相同的警告.我将更正 C 代码,您可以将这两个问题标记为已解决。成交?以上是关于matlab上的旧gcc编译器的主要内容,如果未能解决你的问题,请参考以下文章
在 64 位 Windows 7 机器上使用 GCC 作为 MATLAB 2014a 的默认 MEX 编译器