在项目中,遇到需要用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++代码调用
-
#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>
-
#include<string>
-
-
using
namespace
std;
-
int main() {
-
-
if (!MatPredictGPSInitialize()){
-
system(
"pause");
-
return
-1;
-
}
-
-
const
char* file =
"C:\\Users\\Administrator\\Desktop\\image.jpg";
-
mwArray arr(1,2,mxDOUBLE_CLASS);
-
predict_gps(
1, arr, file);
-
MatPredictGPSTerminate();
-
system(
"pause");
-
return
0;
-
}
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