Visual Studio 與 Matlab實現混合編程

環境:html

Win10ios

vs2010windows

Matlab2015函數

裏面有不少選作的內容,其中二、3必作ui

1.Matlab環境設置: spa

  (選作)我沒有作這步,由於打mbuild -setup指令不識別,缺乏SDK,可是能夠正常調用Matlab,這步是其餘方式調用Matlab中的一步,使用Matlab生成DLL文件,VS引用3d

       要創建獨立運行的C應用程序,系統中須要安裝Matlab、Matlab編譯器、C/C++編譯器以及Matlab C/C++數學庫函數和圖形庫函數。
Matlab編譯器使用mbuild命令能夠直接將C/C++源代碼編譯爲獨立運行程序,在這些源代碼中可使用Matlab提供的接口來調用Matlab數學庫函數。
       雖然生成的可執行程序能夠脫離Matlab環境運行,可是它須要Matlab C/C++數學庫文件或者圖形庫文件的支持才能運行。但若是C/C++源代碼徹底是按傳統C/C++源代碼語法規則編寫,沒有包含Matlab數學庫和圖形庫的調用,則不只能夠獨立與Matlab環境,也不須要那兩個庫函數的支持。code

      在 Matlab 的Command Window 下輸入命令。htm

       mbuild – setupblog

      操做過程以下圖:

    而後輸入命令

    mex – setup

    以相似的方法配置編譯器。Matlab 的配置完成。

2.VS環境設置        (必作)

(1)設置Include 和Library 目錄

    項目右鍵->屬性->VC++目錄->包含目錄:添加

    <MATLAB>\R2010b\extern\include\win64   個人是:D:\RUANJIAN\Matlab\extern\include\win64

    <MATLAB>\R2010b\extern\include\           個人是:D:\RUANJIAN\Matlab\extern\include

    項目右鍵->屬性->VC++目錄->庫目錄:添加

    <MATLAB>\R2010b\extern\lib\win32\microsoft    個人是:D:\RUANJIAN\Matlab\extern\lib\win64\microsoft

    <MATLAB>\R2010b\extern\lib\win64\microsoft

截圖:

    :

 

 

 

(2)設置工程目錄:      ( 我並無設置)  

    項目右鍵->屬性->C/C++->常規->附件包含目錄:添加

    <MATLAB>\R2010b\extern\include\win64

    <MATLAB>\R2010b\extern\include\

     項目右鍵->屬性->連接器->常規:添加

     <MATLAB>\R2010b\extern\lib\win32\microsoft

    <MATLAB>\R2010b\extern\lib\win64\microsoft

    項目右鍵->屬性->連接器->輸入->附件依賴性:添加  (必作)

    libeng.lib
    libmat.lib
    libmex.lib
    libmx.lib  

    注:1.lib文件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根據須要增減

           2.附件依賴性在VS2010前以空格隔開,在VS2010後使用;隔開。

    截圖: 

 

 

個人截圖:

 

 

    項目右鍵->屬性->連接器->高級->目標計算機:更改(只針對64位WINDOWS)    (選作)

    MachineX86 -> MachineX64

    注:分析緣由爲MATLAB根據計算機平臺選擇了X64編譯環境,如此處不修改會出現 錯誤3   

(3)配置管理器設置(只針對64位WINDOWS)                                                 (必作)

    生成->配置管理器->平臺:更改

    Win32->X64

    注:分析緣由爲配合連接器中目標計算機的修改,如此處不修改會出現 錯誤4

    截圖:

 

3.系統(Windows)環境設置   (必作)

   個人電腦->屬性->高級系統設置->高級->環境變量->Path,添加:

     <MATLAB>\R2010b\bin;<MATLAB>\R2010b\extern\lib\win64\microsoft;<MATLAB>\bin\win64

    注:1.Windows7的狀況下,「用戶變量」和「系統

變量」都需 添加,如不添加,運行時會出現 錯誤5

 

 

    2.哈哈,別忘記重啓哈,重啓後生效

  

    

   OK!配置就此結束,如今就開始engOpen吧!!對了,別忘記添加#include "engine.h"。

 例程:

#include <iostream>

#include "windows.h"

#include "math.h"

#include "engine.h"       //Matlab的頭文件

int main ()

{

    const int N = 50;

    double x [ N ], y [ N ];

    int j = 1;

    for ( int i = 0; i < N ; i ++)

    {

        x [ i ] = ( i + 1);

        y [ i ] = sin ( x [ i ]) + j * log ( x [ i ]);

        j *= -1;

    }

    Engine * pEng = NULL ;

    //open engine

    if (!( pEng = engOpen ( NULL ))) 

    {

        std :: cout << "Openmatlab enging failed!" << std :: endl ; 

        system ( "pause" );

        return -1; 

    }

    mxArray * xx = mxCreateDoubleMatrix (1, N , mxREAL );

    mxArray * yy = mxCreateDoubleMatrix (1, N , mxREAL );

    memcpy ( mxGetPr ( xx ), x , N * sizeof ( double ));

    memcpy ( mxGetPr ( yy ), y , N * sizeof ( double ));

    engPutVariable ( pEng , "xx" , xx );

    engPutVariable ( pEng , "yy" , yy ); 

    std :: string evalString = "plot(xx,yy);" ;

    engEvalString ( pEng , evalString . c_str ());

    mxDestroyArray ( xx );

    mxDestroyArray ( yy );

    Sleep (3*60*100);

    //close engine                關閉Matlab 

    if ( NULL != pEng )

    {

        engClose ( pEng );

    }

    system ( "pause" );

    return 1;

}

效果;

 

 

附錄:錯誤狀況及解決

 

2.提示:「libeng.lib libmat.lib"沒法打開       

解決:附件依賴性在VS2010前以空格隔開,在VS2010後使用;隔開。

 

 

3.提示:「  "error LNK2019: 沒法解析的外部符號 _interp1Initialize,該符號在函..."」

解決:操做如2.VS環境設置中的(2) 項目右鍵->屬性->連接器->高級->目標計算機:更改...及(3)

 

4.提示:「  "模塊計算機類型「X86」與目標計算機類型「x64」衝突..."」

解決:操做如2.VS環境設置中的(3)

 

4.提示:「 系統丟失libeng.dll..."」

解決:操做如 3.系統環境設置 

 

1.mbuild – setup後沒有「VS2010」選項
解決:MATLAB 2010b 以後包含對VS2010編譯器的支持,2010a及以前版本不包含支持。若是MATLAB環境較低,Matlab官方有一個補丁(http://www.mathworks.com/support/solutions/en/data/1-D5W493/?solution=1-D5W493)

源地址:http://blog.renren.com/GetEntry.do?id=721771317&owner=240190126

源地址:http://www.cnblogs.com/uniquews/archive/2012/12/27/2835923.html

相關文章
相關標籤/搜索