【问题标题】:using C++11 in Mex with g++ 4.8 in linux在 Mex 中使用 C++11,在 Linux 中使用 g++ 4.8
【发布时间】: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++?

标签: matlab c++11 mex g++4.8


【解决方案1】:

这没有意义,但显然使用 -std=c++0x 会起作用。我认为 matlab 会事先进行一些检查,并且由于它不支持 4.8 正式版,即使编译器支持它也不接受它。 有人可以支持我吗?

【讨论】:

  • mex 调用的 g++ 版本可能与终端调用的不同。将 -v 添加到 mexopts.sh 以确定 mex 正在调用的版本。 gcc4.8肯定支持-std=c++11或者运行mex -setup看是否找到gcc4.8
【解决方案2】:

试试

mex CXXFLAGS="\$CXXFLAGS -std=c++11" simple_example.cpp

在不直接运行 Matlab 的情况下构建您的 mex 文件,例如使用 CMake,如下 github 存储库:mex-it

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多