项目中遇到一个问题,需要用c++调用matlab程序,这里记录下整个过程。
准备环境
matlab 2014a
visual studio 2010
PS:版本问题要注意,之前是visual studio 2017,这个就一直报错(笑cry),matlab比较难安装,所以一般来说调节visual studio版本就好了。
matlab设置visual studio的c++编译
在MATLAB命令行输入:mex –setup;
然后命令行继续输入:mbuild –setup,选择已安装的VC编译器。
matlab 函数编译生成 dll
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函数,可以将依赖的函数一并放在后面,用空格分开就好。
命令运行后生成以下文件:
编写c++调用dll
#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
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2010anzhuangwenti/2020/0724/2595.html