MATLAB2012b與vs2013混合編程連接問題

         首先,必須要強調的問題是,我本來以爲這兩者混合編程與雙方的版本問題沒有關係,雖然網上有很多網友都說和版本有關,但是我還是一頭死心,想把MATLAB2012b與vs2013連接起來。嘗試了千百種方法,出錯誤到頭大。在別人的MATLAB2016a上運行mcc   mex等命令順利得到我要配置的文件。因此,終於放棄掙扎,卸載了2012b安裝了較新版本的MATLAB2016a。一下是具體過程:


          (1)第一次努力調試:整個系統的環境是w10,MATLAB2012b,vs2013

           step 1:這個時候就需要在MATLAB裏面敲很多命令,包括沒build -setup;mex -setup;兩個命令。需要注意的是,這兩個命令中“-”前面是有空格的。具體的我是參考是百度文庫,白水米飯這位網友上傳的文章的第一部分內容:

                   http://wenku.baidu.com/link?url=hug8CR9wprZ401u9TgTPXdBGG2sD8OAfS_tEVnDwTUzw4BUxJncW_p_34uoSnq8D-                      HonLddofmYVMc1ad9y4Sl6MQZs5YNLPGGbvJPHAsz3

          step 2:寫m文件,實際上是一個簡單的函數

                              function [c]=MyAdd(a,b)

                              %UNTITLED Summary of this function goes here

                              % Detailed explanation goes here


                                  c=a+b

                                  end

                             保存爲MyAdd.m文件。

           step 3:在MATLAB中敲入 mcc -W cpplib:MyAdd -T link:lib -h libmmfile.mlib MyAdd.m      命令。

                          等待MATLAB反應,這需要一段時間。但實際上,我在MATLAB2012b中,走到這一步就完全卡死了,根本得不到我想要的xx.cpp   xx.dll   xx.def   xx.exp ……等                           等。因此挪步第二種環境情況。


          (2)第二次努力調試:整個系統的環境是w10,MATLAB2016a,vs2013

            step 1:卸載MATLAB2012b

            step 2:安裝MATLAB2016a,需要該步驟中MATLAB2016a安裝包的同志可以在下方評論區留言告知,我會將百度網盤整理分享出來。

            step 3:敲MATLAB命令

                           mcc -W cpplib:MyAdd -T link:lib -h libmmfile.mlib MyAdd.m 

                          等待反應然後

                           mex -setup

                          等待反應做相應選擇。會出現如圖所示的幾個文件。還有相應的readme等txt文件等。

                                                                                                                      

            step 4:配置系統環境。

                            第一,在搜索窗搜索“環境變量”----用戶變量-----路徑(path)------新建(添加MATLAB2016a軟件安裝目錄):

                                      即就是添加這兩個:從…到MATLAB/extern/lib/win64/microsoft;

                                                                          從…到MATLAB/bin/win64;

                           第二,在搜索窗搜索“環境變量”----系統變量-----路徑(path)------新建(添加目錄):

                                       即就是添加這兩個:從…到MATLAB/runtime/win64;

                                                                           從…到MATLAB/bin/win64;

                                                                           從…到MATLAB/bin;

                                                                           從…到MATLAB/extern/lib/win64/microsoft;

          step 5:配置vs2013環境。

                       第一,創建一個控制平臺程序,空項目,建一個cpp文件,寫入測試程序:

                                            test.cpp : 定義控制檯應用程序的入口點。




#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <iostream>
//#include "mclmcr.h"
//#include "matrix.h"
//#include "mclcppclass.h"
#include "MyAdd.h"


using namespace std;
#pragma comment(lib, "MyAdd.lib")


int main()
{
double a = 6;
double b = 9;
double c;
           // initialize lib,這裏必須做初始化!
if (!MyAddInitialize())
{
std::cout << "Could not initialize libMyAdd!" << std::endl;
return -1;
}
//mclmcrrt9_0_1.dll
         // 爲變量分配內存空間,可以查幫助mwArray
mwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩陣的大小(所有maltab只有一種變量,就是矩陣,爲了和Cpp變量接軌,設置成1*1的矩陣,mxDOUBLE_CLASS表示變量的精度)
mwArray mwB(1, 1, mxDOUBLE_CLASS);
mwArray mwC(1, 1, mxDOUBLE_CLASS);
         // set data,不用我解釋了吧,很簡單的,調用類裏面的SetData函數給類賦值
mwA.SetData(&a, 1);
mwB.SetData(&b, 1);
         // using my add,掉我自己寫的函數
MyAdd(1, mwC, mwA, mwB);
         // get data,不用我解釋了吧,很簡單的,調用類裏面的Get函數獲取取函數返回值
c = mwC.Get(1, 1);
std::cout << "c is n" << c << std::endl;
        // 後面是一些終止調用的程序
        // terminate the lib
MyAddTerminate();
        // terminate MCR
mclTerminateApplication();
return 0;
}


//int _tmain(int argc, _TCHAR* argv[])
//{
// return 0;
//}


                  第二,屬性頁---VC++目錄---包含目錄,添加:從…到MATLAB/extern/include;

                  第三,屬性頁---VC++目錄---庫目錄,添加:從…到MATLAB/extern/lib/win64/microsoft;

                  第三,屬性頁---C/C++---常規----附加包含目錄,添加:從…到MATLAB/extern/include;

                  第四,屬性頁---連接器---常規----附加庫目錄,添加:從…到MATLAB/extern/lib/win64/microsoft;

                  第五,屬性頁---連接器---輸入----附加依賴項,添加:libeng.lib  libmat.lib   libmex.lib    libmx.lib    mclmcrrt.lib   mclmcr.lib   libMyAdd.lib

      step 6:把生成的libxx.h    libxxx.dll    libxxx.lib 等文件複製到vs下新建的工程的文件夾下,然後添加-----現有項     添加到工程中。

     step 7:然後編譯連接,生成運行。即可完成混合編程測試。


           

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章