OPENCV249 編譯靜態庫(含CUDA,OPENCL)

廢話不多說直接上料:


1. 首先官網下載安裝包 http://opencv.org/downloads.html


測試環境: WIN10 CUDA6.0 OPENCV2.4.9 VS2010 CMAKE3.1.0


2.解壓壓縮包至D:opencv下,

3.使用CMAKE編譯,選擇source code 目錄以及需要編譯的目錄

因爲我們這裏是編譯靜態庫故爲了節省時間我們去掉 BUILD下的 BUILD_SHARED_LIBS,同時CUDA 選擇動態分離式編譯方式,勾選CUDA_SEPARABLE_COMPILATION,這裏是爲了後續動態並行,但也給後續編譯工程帶來了問題,需要將.cu包含進去。


4.編譯工程:

這裏只需要編譯3rdparty 以及 modules ,最後生成INSTALL即可。

按住ctrl鍵,選中需要編譯的項目,注意確認 項目->屬性配置屬性->c/c++->代碼生成選項,在右側窗口中的運行時庫中選擇多線程調試(/MTd) Release 模式是/MT。


最後在編譯目標下生成install文件夾以及staticlib

致此編譯工作結束,編譯過程中的error:

1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: The command "setlocal
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: "C:\Program Files (x86)\CMake\bin\cmake.exe" -DBUILD_TYPE=Release -P cmake_install.cmake
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :cmEnd
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :cmErrorLevel
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: exit /b %1
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :cmDone
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: if %errorlevel% neq 0 goto :VCEnd
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :VCEnd" exited with code 1.

我直接無視過了,編譯過很多次每次都是這樣,不知道哪位解決了這個問題,不過這個無關緊要不影響編譯。


下面是如何建立工程使用靜態庫編譯

需要鏈接以下庫:

#ifdef _DEBUG
#define LINK_MULTI(a)      #a##"249d.lib"
#pragma comment(lib,LINK_MULTI(opencv_core))
#pragma comment(lib,LINK_MULTI(opencv_highgui))
#pragma comment(lib,LINK_MULTI(opencv_video))
#pragma comment(lib,LINK_MULTI(opencv_imgproc))
#pragma comment(lib,LINK_MULTI(opencv_objdetect))
#pragma comment(lib,LINK_MULTI(opencv_ml))
#pragma comment(lib,LINK_MULTI(opencv_legacy))
#pragma comment(lib,LINK_MULTI(opencv_features2d))
#pragma comment(lib,LINK_MULTI(opencv_nonfree))
#pragma comment(lib,LINK_MULTI(opencv_stitching))
#pragma comment(lib,LINK_MULTI(opencv_calib3d))
#pragma comment(lib,LINK_MULTI(opencv_contrib))
#pragma comment(lib,LINK_MULTI(opencv_flann))

#pragma comment(lib, "zlibd.lib")
#pragma comment(lib, "libtiffd.lib")
#pragma comment(lib, "libpngd.lib")
#pragma comment(lib, "libjpegd.lib")
#pragma comment(lib, "libjasperd.lib")
#pragma comment(lib, "IlmImfd.lib")
#pragma comment(lib, "comctl32.lib")
#pragma comment(lib, "vfw32.lib")
#else
#define LINK_MULTI(a)      #a##"249.lib"
#pragma comment(lib,LINK_MULTI(opencv_core))
#pragma comment(lib,LINK_MULTI(opencv_highgui))
#pragma comment(lib,LINK_MULTI(opencv_video))
#pragma comment(lib,LINK_MULTI(opencv_imgproc))
#pragma comment(lib,LINK_MULTI(opencv_objdetect))
#pragma comment(lib,LINK_MULTI(opencv_ml))
#pragma comment(lib,LINK_MULTI(opencv_legacy))
#pragma comment(lib,LINK_MULTI(opencv_features2d))
#pragma comment(lib,LINK_MULTI(opencv_nonfree))
#pragma comment(lib,LINK_MULTI(opencv_stitching))
#pragma comment(lib,LINK_MULTI(opencv_calib3d))
#pragma comment(lib,LINK_MULTI(opencv_flann))
#pragma comment(lib, "zlib.lib")
#pragma comment(lib, "libtiff.lib")
#pragma comment(lib, "libpng.lib")
#pragma comment(lib, "libjpeg.lib")
#pragma comment(lib, "libjasper.lib")
#pragma comment(lib, "IlmImf.lib")
#pragma comment(lib, "comctl32.lib")
#pragma comment(lib, "vfw32.lib")
#endif


如果在編譯時提示error:

1>opencv_core249.lib(cuda_compile_generated_matrix_operations.cu.obj) : error LNK2001: unresolved external symbol ___cudaRegisterLinkedBinary_64_tmpxft_0000e530_00000000_14_matrix_operations_compute_35_cpp1_ii_d262f657

那就是因爲我們沒有添加.cu文件,添加matrix_operations.cu路徑在D:\opencv\opencv249\sources\modules\dynamicuda\src\cuda下

注意此時將工程生成自定義中規則選擇爲CUDA



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章