【问题标题】:Compiling C++11 code as part of a MATLAB mex file将 C++11 代码编译为 MATLAB mex 文件的一部分
【发布时间】:2012-04-13 05:30:05
【问题描述】:

我有一段用 C++11 编写的代码,我想将其编译为 GNU/Linux 的 MATLAB MEX 文件的一部分。

问题是 Linux 上的 MATLAB 仅支持 GCC 4.3(及更早版本),不支持编译我的 C++11 代码所需的 GCC 4.7。

是否有可能解决这个问题?

是否可以通过使用 GCC 4.7 编译一些目标文件并使用 GCC 4.3 将它们链接到 MEX 文件来解决此问题?

提前致谢!

【问题讨论】:

  • 不支持是什么意思?最后,mex 文件只是具有简单 C 接口的共享库。所以你可能必须手动编译它,并且可能需要编辑一些标题,但你应该能够让它工作。
  • 请看这个答案:stackoverflow.com/questions/25648949/…。基本上将 -std=c++11 添加到 mexopts.sh 中定义的 CFLAGS 工作正常。

标签: c++ c++11 matlab-deployment


【解决方案1】:

如果您可以在 4.3 扩展中编写任何代码并对其进行编译,那么只需编写代码来 dlopen 您在 4.7 中编写和编译的共享对象。使用 4.7 .so 完成所有 c++11 工作,只需通过 C 接口将信息传递给它。您编写的 4.3 扩展可以访问所有 MATLAB 互操作的东西。

您也可以通过多种其他方式执行此操作,但这是最干净的。您不应该尝试将目标文件链接到您的 4.3 扩展,因为您将访问标准库的两个不同版本(完全不同),并且您不能拥有具有不同布局/方法/等的相同类的多个定义.您将与 c++ 的单一定义规则 (ODR) 作斗争。

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多