项目中遇到一个问题,需要用c++调用matlab程序,这里记录下整个过程。
matlab 2014a
visual studio 2010
PS:版本问题要注意,之前是visual studio 2017,这个就一直报错(笑cry),matlab比较难安装,所以一般来说调节visual studio版本就好了。
mcc -W cpplib:MatPredictGPS -T link:lib ../predict_gps.m
其中MatPredictGPS为生成的文件名
cpplib,是指编译成C++的lib
-T表示目标,link:lib表示要连接到一个库文件的目标
../predict_gps.m为需要生成dll的函数。
PS:如果predict_gps.m依赖其它matlab函数,可以将依赖的函数一并放在后面,用空格分开就好。
命令运行后生成以下文件:
#include "stdafx.h" #pragma comment(lib,"mclmcrrt.lib") #pragma comment(lib,"libmx.lib") #pragma comment(lib,"libmat.lib") #pragma comment(lib,"mclmcr.lib") #pragma comment(lib,"MatPredictGPS.lib") #include "Afxwin.h" #include "mclmcr.h" #include "matrix.h" #include "mclcppclass.h" #include "MatPredictGPS.h" #include<iostream> #include<fstream> using namespace std; int main() { if (!MatPredictGPSInitialize()) return -1; char image_files[] = {"D:\\workspace\\matlab\\2.jpg"}; mwArray arr(1,2,mxDOUBLE_CLASS); predict_gps(1, arr, image_files); MatPredictGPSTerminate(); system("pause"); return 0; }
上面的代码需要配置环境才能正常运行。
1.首先配置x64环境,如果你的电脑是32位,此步可以省略
2.右键项目,点击属性,在general里面的use of MFC选择in a shared dll
3.在c/c++ general下面设置additional include directory,主要添加matlab下面的链接库(请参考自己的matlab安装位置,我的matlab安装路径是E:/software/matlab),还有之前matlab生成的位置。
4.在Linker general下面设置additional Library directory,主要添加matlab下面的链接库(请参考自己的matlab安装位置,我的matlab安装路径是E:/software/matlab)
这样之后编译就会成功。
直接运行上面生成的exe文件就会出现下面的错误:

解决方式是将matlab生成的文件中.dll .lib .h文件粘贴到c++编译得到的exe文件同意目录下,如下所示:

好了到此为止,这件事就算完成了,如果遇到其它问题请自行查找咯。
1.https://blog.csdn.net/wangrenbao123/article/details/70169029 两者在调用过程中的数据结构说明
2.https://blog.csdn.net/cppyin/article/details/6225596 VC2010中”Include Directories” 和 “Additional Include Directories”的区别
3.http://blog.sina.com.cn/s/blog_79ba23780101gpeh.html
1.https://www.cnblogs.com/jmliao/p/5575202.html
2.https://www.cnblogs.com/lidabo/p/3501270.html
3.https://blog.csdn.net/cppyin/article/details/6225596