在項目中,遇到需要用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