C++調用MATLAB函數、打包dll

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










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章