VLFeat開源庫介紹及在VS2013中的編譯
來自: http://blog.csdn.net/fengbingchun/article/details/50638391
VLFeat是一個開源的計算機視覺算法庫,內容主要包括feature detectors、feature extractors、k-means clustering、randomized kd-tree matching、super-pixelization。它是跨平臺的,能夠應用在Linux、Mac、Windows平臺。它的License是BSD。
在VS2013中編譯VLFeat源碼操作步驟:
1. 從http://www.vlfeat.org/ 下載源碼(或從https://github.com/vlfeat/vlfeat下載),最新版本為0.9.20;
2. 打開VS2013 x64本機工具命令提示,在命令行中輸入:$ nmake version,如下圖:
3. 在make/nmake_helper.mak文件中加入vs2013參數,如下圖:
4. 將VS2013 x64本機工具命令提示定位到/vlfeat-0.9.20目錄下,輸入:
$ nmake /f Makefile.mak
5. 運行完上面的語句后,將會在/vlfeat-0.9.20/bin目錄下,新增一個win64目錄,里面會有生成的vl.dll、vl.lib和一些test執行文件;
6. 按照上面的步驟雖然生成了vlfeat動態庫,但是不便于調試,下面新建一個控制臺工程VLFeat_DLL,將/vlfeat-0.9.20/vl目錄中的文件加入到VLFeat_DLL工程中;
7. 將VLFeat_DLL工程,配置屬性中的配置類型由應用程序(.exe)改為動態庫(.dll);字符集由使用Unicode字符集改為使用多字節字符集;
8. 遇到的問題及處理方法:
(1)、error C2491,不允許dllimport函數的定義:將宏VL_BUILD_DLL加入到預處理器定義中;
(2)、error C4996:將宏_CRT_SECURE_NO_WARNINGS加入到預處理器定義中;
(3)、三個類似的錯誤,fatal error C1189: #error : "Compiling with SSE2 enabled, …”:分別將三個宏 __SSE2__、_SSE2_、__AVX__加入到預處理器定義中;
(4)、六個類似的錯誤,error C4146 一元負運算符應用于無符號類型,結果仍為無符號類型:將C/C++--> 常規--> SDL檢查改為否(/sdl-)。
9. 重新編譯整個工程即可生成VLFeat_DLL.dll;
10. 驗證VLFeat_DLL.dll動態庫的正確性:新添加一個Test_VLFeat控制臺工程,測試代碼及結果圖如下:
#include <iostream> #include <generic.h> int main() { VL_PRINT("Hello world!\n"); std::cout << "ok!" << std::endl; return 0; }
