c++调用matlab函数 - dll方式

匿名 (未验证) 提交于 2019-12-03 00:26:01

项目中遇到一个问题,需要用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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!