【发布时间】:2015-03-04 13:16:02
【问题描述】:
我正在尝试从 mex 脚本调用我在 C++ 11 中编写的函数。 C++ 代码需要 -std=c++11,并且可以从终端正常运行。 这是 g++ -v 输出:gcc 版本 4.8.2 20140120 (Red Hat 4.8.2-15) (GCC) 我有用于 Red Hat 的 Matlab 2013a。
当我第一次尝试从 matlab 控制台调用 mex filename.cpp 时,我得到:
此文件需要 ISO C++ 2011 的编译器和库支持 标准。此支持目前是实验性的,必须启用 使用 -std=c++11 或 -std=gnu++11 编译器选项。
所以,我进入了 /usr/local/MATLAB/R2013a/bin/mexopts.sh 文件,matlab 用来获取更复杂的选项并添加了 -std=c++11。现在我明白了:
cc1plus:错误:无法识别的命令行选项“-std=c++11”
从mex -v filename.cpp 得到的完整命令是:
g++ -c -I/usr/local/MATLAB/R2013a/extern/include -I/usr/local/MATLAB/R2013a/simulink/include -DMATLAB_MEX_FILE -ansi -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread -std=c++11 -DMX_COMPAT_32 -O -DNDEBUG "mexMorph.cpp"
那么,我怎样才能让它正确编译呢?
【问题讨论】:
-
那篇文章是关于 g++ 4.1 的,它不支持 std=c++11,而我有 4.8 支持。
-
也许
-ansi有冲突?或者 MATLAB 没有运行您期望的 g++? -
看我的回答...很奇怪。
-
这很奇怪。也许将
--version放入 opts 以确保它使用您认为它正在使用的 g++?