天天看點

vc++6.0調試mex檔案

    看标題别以為我是抄書,如<精通Matlab與c/c++混合程式設計設計 第二版>一書,畢竟網上已經一堆了,我實在不好意思做網頁的搬運工,當然解決過程還是有的,在文章尾部。

    環境是matlab7和vc++6,老土是老土點了,能用就行。上文提到的書本作者,你出來,我保證不打你:P134結尾部分,提到"在Output file name 文本框中更改輸出檔案的擴充名,如果是32位系統則改為mexw32..."。我誠實的跟着你做失敗了。如果搜尋到本文的讀者按此書依樣畫葫蘆失敗了,不妨換個思路,不要盲目的在網上找文章,因為其他的環境未必适合你,而且我也不能拍胸脯保證我的能過。

    首先,不得不承認,matlab有強大的文檔,也不得不承認我們很懶,懶到不相信文檔。當然可以說不會找。我展示下我怎麼搜尋到這個環境的搭建的。

    沒猜錯,大家都是從編寫簡單的mexFunction開始的,這之前,會運作mex -setup來搭建編譯環境,然後在熟悉的vs環境下開發,最後在matlab指令框中用mex xxx.c的方式編譯mex源檔案。不知道大家有沒有注意,如果代碼有文法問題,matlab的出錯提示和vs的出錯提示相像,如果回過頭看看介紹手頭介紹c與matlab混合程式設計的書,上面會說mex編譯時用的就是setup時選擇的編譯器。先搜搜文檔上關于mex -setup的内容,結果如下:

vc++6.0調試mex檔案

該頁面的最下方有個連接配接跳轉到幫助文檔中所有關于mex檔案注意事項的入口處,其中提到了在windows下編譯mex的方法:

vc++6.0調試mex檔案

點選進入,開始是關于指令行工具搭建編譯環境,拖到最下面是IDE工具的搭建:

vc++6.0調試mex檔案

上面的步驟描述的很清楚,其中沒有要求修改輸出檔案名為.mexw32...

文檔上雖然描述了編譯的過程,但是沒有提到怎麼運作,我嘗試了幾次,把調用mex輸出檔案放在本文最後。

參考這個文檔總結出整個過程如下:

1.建立工程名為sums的空dll工程,源碼如下

#include "mex.h"
#include "matrix.h"

void mexFunction(int outArgc,mxArray* outArgv[],int inArgc,mxArray* inArgv[])
{
  mexPrintf("sums\n");
}      

2.設定連結庫和頭檔案 預定義宏

2.1)頭檔案路徑和預定義宏

vc++6.0調試mex檔案

2.2)連結庫及路徑:

vc++6.0調試mex檔案

3.建立并添加def檔案

LIBRARY sums.dll
EXPORTS mexFunction      

動态庫的名字是sums.dll是以library名為sums.dll,mex檔案的調用入口函數是mexFunction。是以要導出這個函數。

4.設定mex檔案的調試工具,這個倒可以參考文章開頭提到的書

vc++6.0調試mex檔案