在 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...