歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C/C++程序通過動態鏈接庫調用Matlab程序

C/C++程序通過動態鏈接庫調用Matlab程序

日期:2017/3/1 9:15:03   编辑:Linux編程

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;
}

輸出結果:

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

Copyright © Linux教程網 All Rights Reserved