程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Qt Creator下使用CMake項目調試mex文件

Qt Creator下使用CMake項目調試mex文件

編輯:關於C++

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文件了,設置辦法如圖所示

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved