Qt Creator下使用CMake項目調試mex文件。本站提示廣大學習愛好者:(Qt Creator下使用CMake項目調試mex文件)文章只能為提供參考,不一定能成為您想要的結果。以下是Qt Creator下使用CMake項目調試mex文件正文
網上可以找到很多使用Visual Studio編寫、編譯mex文件,並與MATLAB結合調試的文章。但這只限於Win平台,網上許多源碼都是.mexa64的文件,它們的作者是怎樣調試的呢?這裡我引見一下我的方式。
應用Qt的IDE,樹立CMake工程,從而完成一次編碼,多平台復用;而且CMake還可以自動設置Matlab的Include和Lib目錄,免去很多費事;再者,IDE的GUI能讓調試直觀不少,比直接用gdb調試mex方便。
一、完成平台:
操作零碎:Linux Mint 17.3, Ubuntu 14.04, Linux Mint 18, Ubuntu 16.04.
編程工具:CMake 3.7, 零碎自帶的gcc, 零碎自帶的gdb, Matlab 2016b, Qt 5.7
二、樹立CMake工程:
在Qt中新建CMake工程,其構造可以參見此處
http://cn.mathworks.com/matlabcentral/fileexchange/45522-mex-cmake
這裡有它的中文闡明
http://blog.csdn.net/kxuehen/article/details/45851651
其中留意幾點:
1) Matlabdef.def文件的內容是
EXPORTS mexFunction
2) FindMatlab.cmake文件是用於查找本地Matlab的Include和Lib途徑的。CMake經過將其參加CMAKE_MODULE_PATH變量,完成了此查找功用。這裡一定要把環境變量MATLAB_ROOT設為Matlab根目錄,例如,我在~/.bashrc下參加
export MATLAB_ROOT=/usr/local/MATLAB/R2016b
3) 編譯生成的mex文件可以指定地位(即make後,mex文件的生成地位,並不是指定make install之後的裝置地位),在生成mex文件用的CMakeList.txt中設置LIBRARY_OUTPUT_PATH變量即可。例如,我在add_library()前面加上
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
就可把mex文件生成到構建目錄(通常是build目錄)的lib文件夾下了。
三、編譯CMake工程:
用Qt Creator編譯CMake工程,一定要裝置CMake 3.3.2以上版本。假如Edit裡沒有源碼顯示,別忘了點開左側的Project;然後菜單Build->Run CMake,或許右鍵工程名,然後點右鍵菜單中的Run CMake,如圖所示
針對CMake工程,詳細的Qt Creator設置可以參考
http://doc.qt.io/qtcreator/creator-project-cmake.html
四、與Matlab結合調試:
編譯完成之後就可以翻開Matlab,讓Qt Creator運用gdb停止結合調試。在Qt Creator中設置斷點,然後菜單Debug->Start Debuging->Attach to Running Application...
但我在結合調試時遇到2個錯誤:
1) 第一種能夠呈現的錯誤,如下圖所示
可以用以下命令暫時處理問題,
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scop
若要徹底地處理這個問題,可以修正文件/etc/sysctl.d/10-ptrace.conf 將其中的
kernel.yama.ptrace_scope = 1
改為
kernel.yama.ptrace_scope = 0
2) 第二種能夠呈現的錯誤,如下圖所示
這裡的solib-search-path是gdb搜索靜態鏈接庫文件(或許叫共享庫文件,即Linux裡的.so文件或Win中的.dll文件)的目錄,當然gdb也會在其任務的以後目錄停止搜索。那麼這個錯誤其實是說gdb找不到我們的mex文件了,所以我這裡直接設置調試時的Working directory為mex所在目錄,就可以讓gdb直接找到mex文件了,設置辦法如圖所示