C/C++程式通過動態鏈接庫調用MATLAB程式 1 MATLAB編譯器設置 需要設定對應的C++編譯器才能編譯.m文件生成可供C++調用的庫文件。 在MATLAB命令行輸入:mex –setup;然後繼續輸入:mbuild –setup,選擇已安裝的VC編譯器。 2 將MATLAB程式編譯成C/C ...
C/C++程式通過動態鏈接庫調用MATLAB程式
1 MATLAB編譯器設置
需要設定對應的C++編譯器才能編譯.m文件生成可供C++調用的庫文件。
在MATLAB命令行輸入:mex –setup;然後繼續輸入:mbuild –setup,選擇已安裝的VC編譯器。
2 將MATLAB程式編譯成C/C++動態鏈接庫
假設存在一個Add.m的文件需要編譯成庫文件:
function C=Add(A,B) C=A+B; end
2.1 將MATLAB程式編譯成C動態鏈接庫
採用mcc編譯選項:
>>mcc –W lib:libname file.m –T link:lib
採用捆綁命令文件:
>>mcc –B csharedlib:libname file.m
2.2 將MATLAB程式編譯成C++動態鏈接庫
採用mcc編譯選項:
>>mcc –W cpplib:libname file.m –T link:lib
採用捆綁命令文件:
>>mcc –B cpplib:libname file.m
2.3 生成的文件格式
成功編譯會在Add.m的路徑下生成一些文件:
3 創建C/C++程式調用MATLAB函數
3.1 設置項目平臺
根據MATLAB的位數(32或64),設置相應的項目平臺。
3.2 工程環境設置
將前面生成的libAdd.dll、libAdd.h和libAdd.lib三個文件拷貝到新建的C++工程中,並設置工程屬性。
- 項目屬性——VC++目錄——包含目錄:
- 項目屬性——VC++目錄——庫目錄:
- 項目屬性——鏈接器——輸入:
libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
libAdd.lib(最後這一個是Add.m生成的)
3.3 C++程式
#include <iostream> #include "libAdd.h" using namespace std; int main() { if (!libAddInitialize()) return -1; double a[4] = { 1,2,3,4 }; double b[4] = { 1,1,1,1 }; double c[4]; mwArray mwA(2, 2, mxDOUBLE_CLASS); mwArray mwB(2, 2, mxDOUBLE_CLASS); mwArray mwC(2, 2, mxDOUBLE_CLASS); mwA.SetData(a, 4); mwB.SetData(b, 4); Add(1, mwC, mwA, mwB); mwC.GetData(c, 4); cout << "mwC=\n" << mwC << endl; cout << "c=" << endl; for (int i=0;i<4;i++) { if (i%2==0) { cout<<endl; } cout<<'\t'<<c[i]; } cout<<endl; libAddTerminate(); return 0; }
輸出結果: