c++ - 将 C++11 代码编译为 MATLAB mex 文件的一部分

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

我有一段用 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/

相关文章:

时间:2019-03-17 标签:c++boosticlcontainersinsharedmemory

c++ - 如何循环程序在 C++ 中请求新的输入集?

C++简单的函数输出缓存设计

c++ - 部分聚合初始化和非静态数据成员初始化器

matlab - MWArray 到 C# 数组,无需跳过任何步骤

c++ - 返回对父类 C++ 的引用

c++ - 为什么可以使用 [=] 来修改 lambda 中的成员变量?

c++ - 函数不写入 txt 文件

java - 如何运行Matlab编译的Java函数?

matlab - 如何从 MATLAB applicationCompiler 命令中捕获错误