在MATLAB mex文件中编译C++11代码

6
我有一段用C++11编写的代码,想将其编译成MATLAB MEX文件以在GNU/Linux中使用。
问题在于,Linux上的MATLAB仅支持GCC 4.3(及更早版本),而不支持编译我的C++11代码所需的GCC 4.7。
有没有可能绕过这个问题?
是否可以通过使用GCC 4.7编译一些目标文件,并使用GCC 4.3将它们链接到MEX文件中来解决这个问题?
提前感谢!

“不支持”是什么意思? 最终,mex文件只是具有简单C接口的共享库。因此,您可能需要手动编译它,并且可能需要编辑一些头文件,但您应该能够使其正常工作。 - Trass3r
请参阅此答案:https://dev59.com/eIPba4cB1Zd3GeqPnREi。基本上,在 mexopts.sh 中定义的 CFLAGS 中添加 -std=c++11 即可正常工作。 - efx
1个回答

5
如果您可以在4.3扩展中编写任何代码并编译它,那么只需编写代码以dlopen一个在4.7中编写和编译的共享对象。使用4.7 .so来完成您的所有c++11工作,并通过C接口将您的信息简单传递给它。您编写的4.3扩展可以访问所有MATLAB互操作性内容。
当然,您还有其他多种方式可以实现,但这是最干净的一种方式。请勿尝试将对象文件链接到4.3扩展中,因为您将访问两个不同版本的标准库(相当不同),并且不能具有具有不同布局/方法等的相同类的多个定义。您将违反c++的“一个定义规则”(ODR)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接