需要設定對應的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