VC 中建立MEX檔案及除錯

2021-06-06 07:25:52 字數 1690 閱讀 2723

在 matlab 環境中可以方便的編輯 mex 檔案,而編譯 mex 檔案只要一句 mex 命令,所以一般不需要 vc++ 環境來建立 mex 檔案。但對於大型的 mex 程式,可能會比較複雜,容易出錯,這時可以利用 visual c++ 強大的除錯功能。下面通過乙個簡單的例子說明如何在 visual c++ 中建立及除錯的步驟。

問題:在 visual c++ 中建立 mex 檔案,功能是在 matlab 控制視窗中輸出「 hello matlab world 」

1. visual c++ 中 mex 檔案的建立

(1) 建立 dll 工程

在 visual c++ 中建立乙個 mfc dll 工程,命名為 mexdemo ,如圖 1 所示

圖 1 建立 mfc dll 工程

(2) 設定輸出函式

開啟 mfc dll 工程中的 mexdemo.def 檔案,需要在其中定製 dll 檔案的輸出函式,在 def 檔案中的exports 項中新增 mexfunction 一行,設定後, mexdemo.def 檔案內容如圖 2 所示:

圖 2 mexdemo.def 檔案內容

(3) 新增應用程式**

在工程中新建乙個 c++ 原始檔,命名為 main.cpp ,將該檔案新增到工程的原始檔中,功能是輸出一行 "hello matlab world!" 。如圖 3 和圖 4 所示:

圖 3 新增 main.cpp 檔案

圖 4 main.cpp 檔案內容

(4) 編譯器設定

因為 c++ 檔案中含有 matlab 的庫函式,要在 visual c++ 中成功編譯此類 mex 檔案的話要對編譯器做一些必要的設定,下面以 microsoft visual c++ 6.0 為例做如下設定。

新增 include 路徑

開啟「 project setting 」→「 c/c++ 」→「 preprocessor 」→「 additional include directories 」,新增matlab 外部介面的 include 目錄,本機為 "i:/program files/matlab/r2007b/extern/include" 。詳細情況如圖 5所示:

圖 5 新增頭檔案目錄

新增 lib 路徑

開啟「 project setting 」→「 link 」→「 input 」→「 additional library path 」,新增 matlab 外部鏈結庫的目錄,本機為 "i:/program files/matlab/r2007b/extern/lib/win32/microsoft" 。詳細情況如圖 6 所示:

圖 6 設定庫檔案包含目錄

新增鏈結庫

開啟「 project setting 」→「 link 」→「 general 」→「 object/library modules 」,新增附加依賴項 libmx.lib、 libeng.lib 、 libmat.lib 以及 libmex.lib ,詳細情況如圖 7 所示:

圖 7 新增附件庫檔案

(5) 編譯

設定好 visual c++ 的編譯器後,就可以編譯此工程了,編譯成功後,在 debug 資料夾中會生成 mexdemo.dll 鏈結庫檔案。

(6) 執行

在 matlab 環境下,把 debug 目錄設為當前目錄,然後在 matlab 控制視窗中輸入 mexdemo ,在 matlab 控制視窗中得到結果:

hello matlab world!

vs除錯MEX檔案

matlab裡面無法單步除錯mex函式,故需轉到vs上面除錯,這裡採用vs2010。參考網上很多人寫的方法但都很亂,雜,試了多次都沒有成功。今天終於解決了,現把方法記錄下來。1 vc中編寫mex函式 新建乙個win32 dll 空專案。2 新增原始檔test.cpp,編寫mex函式,mex函式編寫方...

MEX檔案編寫和除錯

作者kaien,2010 02 16 以前我寫過一篇文章,詳細的介紹過mex的格式,語法,編譯,除錯等。可惜記不清放在 了。而最近又用到mex程式設計,所以只能重新溫習一番。時間有限,只記下簡要流程和注意事項,以便往後查詢之需。1.mex的編寫格式 寫mex程式其實就是寫乙個dll程式,所以你可以使...

在VS2013中除錯mex檔案

1.有了包含mexfunction的cpp或c還不夠,還需要建立乙個工程,這裡是新建乙個dll vs 新建 win32專案 dll。2.由於是64位機,所以需要把project設定成x64 debug,檢視 屬性管理器 雙擊project 配置管理器 平台 選擇x64 3.由於mex functio...