vlfeat重編譯以及visual studio與matlab聯調

泡溫水澡的青蛙發表於2016-01-20

Vlfeat重編譯包括兩個層次:
1. 淺層的可以參考vlfeat官網上關於vl_compile 的介紹:http://www.vlfeat.org/matlab/vl_compile.html;這個函式通過mex函式來重新編譯matlab與c++的介面函式,加入除錯的方法是在mex函式的引數裡面加入’-g’引數,修改方式如下:
在vl_compile()檔案中加入下圖的第140行:
這裡寫圖片描述
用這種方式重新編譯的時候其他的必須確保其他的c函式已經生成了連結庫,這種方式除了能大體分析matlab與C++的介面之外,沒什麼其他用途。真正想除錯進入C++的演算法實現需要用makefile重新編譯所有的檔案,就是下面第二種方式;
2. 官網上對於這種方式有講解,但是講的非常簡單,http://www.vlfeat.org/compiling-windows.html
實際中由於自己的環境的問題需要修改的地方也不盡相同,下面的這個帖子講的非常詳細:
http://blog.csdn.net/u012211419/article/details/50311807
我自己的環境是windows10:vs2013+matlab2014+vlfeat0.9.20,按照上面的帖子編譯成功了,需要注意的地方:
按照自己的環境修改nmakefile.mak
我修改的地方如下:
這裡寫圖片描述
這裡寫圖片描述
(如果是win32自行修改50-62行),其他就不用改了
確保自己有makefile.mak中的下列檔案:
這裡寫圖片描述
如果沒有就下載補上即可;連結: http://www.ilovematlab.cn/thread-298097-1-1.html (matlab2014也好用).
不要用visual studio生成解決方案編譯,用visual studio tools裡面的本機工具命令提示
這裡寫圖片描述
如果在裡面切換不到你的vlfeat 目錄下,將vlfeat移到桌面或者c盤然後再切換(不知道為啥。。);
輸入下面的命令就可以編譯了:
這裡寫圖片描述
下面再用matlab與VS進行聯合除錯即可,這裡把之前vs與matlab聯調的方式也給出來:
1) mex的時候在需要除錯的檔案編譯後邊新增-g引數,(這個一般在make.m(matlab的編譯檔案)裡面新增)
2) 在matlab中在呼叫c函式的地方設定斷點;
3) 開啟VS,在VC的工具->附加到程式的對話方塊中選擇matlab程式;
4) 在VS中開啟需要除錯的檔案,在需要的地方設定斷點,會提示無法除錯,不用管這個
5) 回到matlab按F11步進到c函式,此時程式就跳轉到了VS中
6) 然後就可以在VS中除錯c程式了。
需要注意的是每次修改libsvm的程式碼之後需要重新make,否則呼叫的還是原來生成的庫。
問題:
Vs中附加到程式的時候出現問題:一直處於載入符號狀態,這個是由於載入的目錄設定的問題,通過下面的方式修改:
我也遇到同樣的問題,但我已經解決了,首先到工具->選項->除錯->符號,將Mincrosoft符號伺服器前面的勾去掉,再點選清空符號快取,接著刪掉在此目錄下快取符號路徑C:\Users\Administrator\AppData\Local\Temp\SymbolCache。成為預設狀態“符號快取目錄…”點選確定,重啟VS載入專案OK.

相關文章