我有一段用 C++11 编写的代码,我想将其编译为 GNU/Linux 的 MATLAB MEX 文件的一部分。
问题是 Linux 上的 MATLAB 仅支持 GCC 4.3(及更早版本),不支持编译我的 C++11 代码所需的 GCC 4.7。
是否可以解决该问题?
是否可以通过使用 GCC 4.7 编译一些目标文件并使用 GCC 4.3 将它们链接到 MEX 文件来解决这个问题?
提前致谢!
最佳答案
如果您可以在 4.3 扩展中编写任何代码并编译它,那么只需编写代码来 dlopen 一个您在 4.7 中编写和编译的共享对象。使用 4.7 .so 完成所有 c++11 工作,并通过 C 接口(interface)简单地将您的信息传递给它。您编写的 4.3 扩展可以访问所有 MATLAB 互操作内容。
您也可以通过多种其他方式执行此操作,但这是最干净的方式。您不应该尝试将目标文件链接到您的 4.3 扩展,因为您将访问标准库的两个不同版本(完全不同),并且您不能对具有不同布局/方法/等的相同类进行多个定义.您将与 c++ 的单一定义规则 (ODR) 作斗争。
关于c++ - 将 C++11 代码编译为 MATLAB mex 文件的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9927568/