C++调用MATLAB函数、打包dll

4 篇文章 0 订阅

在项目中,遇到需要用c++调用matlab程序,这里记录下整个过程。以供遇到类似问题的人作参考。此问题棘手的原因主要有在MATLAB编写的项目程序中用到了很多深度学习库(FLANN、vlfeat库)和caffe框架,经过多次尝试,最终在VS中成功调用。

准备环境

matlab2017a 

visual studio 2010 

caffe的MATLAB接口配置

使用图形界面工具箱——deploytool编译生成dll

在MATLAB命令行窗口输入:deploytool,会弹出如下对话框: 

选择Library Compiler,如图


选择C++Shared Library,并在Add exported functions添加.m函数,这里只需添加main.m中调用的那一个函数就可以,在下面Files required for your library to runzhong会自动检测添加函数所依赖的其他函数,在Library Name中填写所要生成的dll文件的名称,在Setting设置保存位置,如图


点击Package选择存放位置生成打包,可能会需要点时间。



打包完成,将生成以下文件:


其中.dll .h .lib是C++调用所需要的三个文件。

编写C++代码调用


   
   
  1. #include "stdafx.h"
  2. #pragma comment(lib,"mclmcrrt.lib")
  3. #pragma comment(lib,"libmx.lib")
  4. #pragma comment(lib,"libmat.lib")
  5. #pragma comment(lib,"mclmcr.lib")
  6. #pragma comment(lib,"MatPredictGPS.lib")
  7. #include "Afxwin.h"
  8. #include "mclmcr.h"
  9. #include "matrix.h"
  10. #include "mclcppclass.h"
  11. #include "MatPredictGPS.h"
  12. #include<iostream>
  13. #include<fstream>
  14. #include<string>
  15. using namespace std;
  16. int main() {
  17. if (!MatPredictGPSInitialize()){
  18. system( "pause");
  19. return -1;
  20. }
  21. const char* file = "C:\\Users\\Administrator\\Desktop\\image.jpg";
  22. mwArray arr(1,2,mxDOUBLE_CLASS);
  23. predict_gps( 1, arr, file);
  24. MatPredictGPSTerminate();
  25. system( "pause");
  26. return 0;
  27. }

VS环境配置

上面的代码需要配置环境才能正常运行。 

新建一个“Win32控制台应用程序”的项目,这里项目名“test”。

1.首先配置Release x64环境

2.右键项目,属性,在配置属性,常规,MFC的使用里选择在共享DLL中使用MFC。


3.在VC++目录中的包含目录和库目录中分别添加MATLAB路径。(请参考自己的MATLAB安装位置,我的MATLAB安装路径分别是:D:\MATLAB\R2017a\extern\include; D:\MATLAB\R2017a\extern\lib\win64\microsoft)


4.C/C++常规附加包含目录中添加添加MATLAB路径(请参考自己的MATLAB安装位置)。


5.链接器常规附加库目录中添加添加MATLAB路径(请参考自己的MATLAB安装位置)。


6.将MATLAB,deploytool打包生成的.dll,.h,.lib三个文件copy到解决方案文件下的项目文件目录下,即test.cpp所在的同一目录下。


之后编译就会成功。

如图,本项目是输出图片的经纬度。C++成功调用。



参考:

1.https://blog.csdn.net/u013735511/article/details/80632337

2.https://blog.csdn.net/damant/article/details/51001945










  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值