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


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

MATLAB編譯器設置

需要設定對應的C++編譯器才能編譯.m文件生成可供C++調用的庫文件。

在MATLAB命令行輸入:mex –setup;然后繼續輸入:mbuild –setup,選擇已安裝的VC編譯器。

將MATLAB程序編譯成C/C++動態鏈接庫

假設存在一個myfit.m的文件需要編譯成庫文件:

function c = myfit(x, y, n)
  c=polyfit(x,y,n);
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 編譯myfit.m

>>mcc -B cpplib:myfit myfit.m

 

2.4 生成的文件格式

成功編譯會在Add.m的路徑下生成一些文件:

3 創建C/C++程序調用MATLAB函數

3.1 設置項目平台

根據MATLAB的位數(32或64),設置相應的項目平台。

3.2 工程環境設置

將前面生成的myfit.dll、myfit.h和myfit.lib三個文件拷貝到新建的C++工程目錄中,並將myfit.h加入工程,將並設置工程屬性。

  • 項目屬性——VC++目錄——包含目錄:

  • 項目屬性——VC++目錄——庫目錄:

 

 

  • 項目屬性——鏈接器——輸入:
mclmcrrt.lib
myfit.lib(這是自己生成的)

3.3 C++程序

#include<iostream>
#include<fstream>
#include"myfit.h"
#define NUM 161
using namespace std;

int main()
{
    if (!myfitInitialize())
        return -1;
    ifstream infile("data.txt");
    double x[NUM], y[NUM];
    for (int i = 0; i < NUM&&infile; i++)
    {
        infile >> x[i] >> y[i];
    }
    infile.close();
    mwArray mwx(NUM, 1, mxDOUBLE_CLASS);
    mwArray mwy(NUM, 1, mxDOUBLE_CLASS);
    mwArray mwc;
    mwArray mwn(1, 1, mxINT32_CLASS);
    mwx.SetData(x, NUM);
    mwy.SetData(y, NUM);
    int n;
    cout << "請輸入多項式擬合的階數:";
    cin >> n;
    mwn = n;
    cin.get();
    myfit(1, mwc, mwx, mwy,mwn);
    double c[4];
    mwc.GetData(c, 4);
    cout << "多項式系數為:" << mwc << endl;
    cin.get();
    myfitTerminate();
    return 0;
}

將需要的數據放入工程目錄下,編譯運行。 

輸出結果如下:

 

     將數據文件、myfit.dll和.exe文件放在同一目錄下便可脫離VC++獨立運行。如果要在沒有安裝MATLAB的電腦里運行,需要安裝MCR,MCR安裝文件的位置為:[MATLAB安裝目錄]\toolbox\compiler\deploy\win64。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM