2012-03-29 88 views
6

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

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

是否可以解决问题?

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

在此先感谢!

+0

你不支持什么意思? 最后,mex文件只是带有简单C接口的共享库。所以你可能不得不手动编译它,并可能需要编辑一些头文件,但你应该能够得到它的工作。 – Trass3r 2013-03-06 10:37:05

+0

请看这个答案:http://stackoverflow.com/questions/25648949/error-when-compiling-c11-code-in-a-matlab-mex-file#25649348。基本上将-std = C++ 11添加到mexopts.sh中定义的CFLAGS中可以正常工作。 – efx 2016-02-02 12:23:52

回答

5

如果您可以在您的4.3扩展中编写任何代码并编译它,那么只需编写代码以便将您在4.7中编写和编译的共享对象删除即可。使用4.7 .so来完成所有的C++ 11工作,只需通过C接口将您的信息传递给它。您编写的4.3版本可以访问所有MATLAB互操作性内容。

你也可以做很多其他的方法,但这是最干净的。你不应该尝试将一个目标文件链接到你的4.3扩展中,因为你将访问两个不同版本的标准库(完全不同),并且你不能对具有不同布局/方法/相同类的多个定义。你会打击C++的一个定义规则(ODR)。