Matlab中混编C++可以在提高代码效率的同时保持良好的脚本调用,在Matlab中可以用mex来编译C++代码,mex的命令怎么用可以直接doc mex看到。这篇博客主要因为博主需要跨平台编译,刚好遇到Matlab版本不同而产生的一些奇奇怪怪的问题,主要是记录博主自己踩过的坑。
Matlab版本与编译器版本
不同的Matlab支持不同版本的编译器,在Windows上还比较好,一般用VS或者Intel的编译器都可以,如果要是使用MinGW,那么就要注意支持的版本了,Matlab2017b还只支持4.9.X,如果用不一样的版本可能就会有问题(至少会报个warning,运行的时候也可能会报错,Invalid Mex File这种)。Matlab支持的编译器可以在官网上查询,记得Matlab2018开支就只支持6.3.X了。
接口书写和接口变更
不同版本的Matlab要求的代码和API就不一样,比如Matlab 2017就不认识 mexFunction(int, mxArray, int, mxArray)
这种接口,必须要加个const, 写成 mexFunction(int, mxArray, int, const mxArray)
,否则也是运行时会报错。
还有另一种问题,就是API接口变了,比如老版本的mxGetPtr,在新版本的Matlab中,API名字编程了mxGetMatrixDoubles,编译时候遇到类似问题可以查一查。