关于matlab:在Mex中使用C ++ 11,在linux中使用g ++ 4.8

using C++11 in Mex with g++ 4.8 in linux

我试图从一个MEX脚本中调用我在C++ 11中写的一个函数。C++代码需要-STD=C++ 11,并且从终端运行良好。这里是G++-V输出:GCC版本4.8.2 20140120(Red Hat 4.8.2-15)(GCC)我有Matlab 2013a用于Red Hat。

当我第一次尝试从Matlab控制台调用mex filename.cpp时,我得到:

This file requires compiler and library support for the ISO C++ 2011
standard. This support is currently experimental, and must be enabled
with the -std=c++11 or -std=gnu++11 compiler options.

所以,我进入了/Ur/Prime/Matlab/R2013a/bin /Meopoptsh文件,Matlab用来获得编译器选项并添加了STD=C++ 11。现在我明白了:

cc1plus: error: unrecognized command line option"-std=c++11"

mex -v filename.cpp得到的完整命令是:

1
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"

那么,我如何才能让它正确地编译呢?


尝试

MEX CXXFLAGS ="$CXXFLAGST-STD= C++ 11"SimeLoEngExpL.CPP

在不直接运行matlab的情况下(如使用以下github repo:mex-it)交替构建您的mex文件


我的测试表明,正如另一位反应者推测的那样,-ansi-std=c++11确实存在冲突。您可以编辑您的MEX选项文件(例如我的设置中的~/.matlab/r2014 a/mex_c++_glnxa64.xml)并删除-ansi。另外请注意,MEX接受一个-v标志,它会转储大量有用的调试信息。


这是没有道理的,但显然使用-STD= C++0X将起作用。我认为matlab预先做了一些检查,因为它不正式支持4.8,所以即使编译器也不接受它。有人能支持我吗?