需要設定對應的C++編譯器才能編譯.m文件生成可供C++調用的庫文件。
在MATLAB命令行輸入:mex –setup;然後繼續輸入:mbuild –setup,選擇已安裝的VC編譯器。
假設存在一個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++工程中,並設置工程屬性。
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; }
輸出結果:
C#中調用Matlab人工神經網絡算法實現手寫數字識別 http://www.linuxidc.com/Linux/2016-04/130564.htm
C/C++與Matlab混合編程 http://www.linuxidc.com/Linux/2016-04/130562.htm
Ubuntu Server上安裝Matlab http://www.linuxidc.com/Linux/2014-09/106242.htm
Matlab與C/C++聯合編程之從Matlab調用C/C++代碼 http://www.linuxidc.com/Linux/2012-08/68148.htm
二分類SVM方法Matlab實現 http://www.linuxidc.com/Linux/2013-05/84050.htm
Matlab中的取整函數fix, floor, ceil與round http://www.linuxidc.com/Linux/2013-10/91161.htm
Matlab編譯cuda的.cu文件 http://www.linuxidc.com/Linux/2014-04/100675.htm
Linux Matlab服務器進一步改造成Application Server(應用程序服務器) http://www.linuxidc.com/Linux/2014-09/106340.htm
Matlab 坐標圖動畫,動態顯示數據 http://www.linuxidc.com/Linux/2016-03/129056.htm
Ubuntu 14.04安裝Matlab2012a過程 http://www.linuxidc.com/Linux/2015-12/126297.htm