寫給和我一樣的小白。求助和不明白的地方用橙色加以表示
平臺:
Windows 10.0.15063
CMake: 3.9.0 下載地址:https://cmake.org/download/
顯卡:
NVIDIA GeForce GT 755M (筆記本)
軟件/庫資源:
CUDA 8.0 GA1 下載地址:https://developer.nvidia.com/cuda-80-download-archive
OpenCV3.4.1 下載地址:https://opencv.org/opencv-3-4-1.html
TBB4.4 下載地址:https://github.com/01org/tbb/releases
VS2015 community (默認已有)
編譯器:
VS2015 Win64 (默認已有)
1.安裝CUDA8.0
1)依據個人所需,下載軟件資源
2)確保自己電腦的GPU支持CUDA,詳細資料諮詢
https://www.geforce.com/hardware/technology/cuda/supported-gpus?field_gpu_type_value=All&page=2
3)確保自己電腦有相應的顯卡驅動程序(此條爲網上所云,但是好像安裝CUDA的時候似乎也會給裝?)
4)安裝CUDA 個人採用精簡安裝於默認路徑,建議還是高級選項裏確認一下什麼安裝了什麼沒有安裝
5)爲了今後的方便,按照網上的流程對CUDA進行了配置,並運行了一個簡單的例程,配置流程參照(應該可以不用配置)
https://yq.aliyun.com/articles/71287
http://blog.csdn.net/lvfeiya/article/details/53325784
運行例程爲第一篇文章裏所說的nbody
2.安裝TBB和OpenCV3.4庫和CMake
與其說安裝,不如說解壓,庫下載並解壓到指定位置。CMake下載後順序安裝即可。
我的TBB解壓路徑爲:D:\tbb2018_20171205oss
並添加系統環境變量 D:\tbb2018_20171205oss\bin\intel64\vc14
其中VC14代表是VS2015 intel64代表是應用於64位的系統
我的OpenCV解壓路徑爲:D:\openCV3.4.1\opencv(之前有openCV2了用於區別)這個時候OpenCV庫已經可以在VS裏使用了,配置方法具體參照:
http://blog.csdn.net/poem_qianmo/article/details/19809337
3.CMake設置
從這裏開始終於正式進入重編譯階段.
1)首先打開CMake,源代碼位置爲OpenCV源碼位置,輸出位置爲自己設定的位置,進行第一次配置(configure)
並確定採用VS2015 x64,模式默認就行。我的設定位置爲:D:/opencv3_CUDA
2)仔細瀏覽整個配置紅色的配置選項,如果這一步出現了問題,後面的編譯將很有可能不成功。
由於之前安裝了CUDA,如果一切配置正確,WITH_CUDA是默認勾選上的,檢查其是否被勾選。檢查CUDA相關文件夾的路徑,版本等情況是否符合自己的要求,依據http://blog.csdn.net/wolffytom/article/details/49976487,確保BUILD_CUDA_STUBS 沒有 被選中。我的配置完情況如下(當然有些功能看自己需求添加或刪改):
設定完成後可以進行一次配置(configure)
之前解壓了TBB,但是我這裏沒有爲WITH_TBB自動畫勾,就需要自己勾選上。這時候點擊一次配置(configure),會讓你選擇TBB相關文件的路徑, 對應我之前的TBB解壓路徑 填寫:
TBB_ENV_INCLUDE D:/tbb2018_20171205oss/include
TBB_ENV_LIB D:/tbb2018_20171205oss/lib/intel64/vc14/tbb.lib
TBB_ENV_LIB_DEBUG D:/tbb2018_20171205oss/lib/intel64/vc14/tbb_debug.lib
以上這幾個不要填寫錯誤仔細檢查,否則編譯時會提示編譯錯誤 XXX.lib打不開 等(親身體會orz)
TBB_DIR這個選項我填寫了已經解壓的文件夾但是在配置之後會消失,並不影響之後的編譯工作,還希望能有個明白的說法。
填寫完成後再點擊一次配置(configure),我這裏是自動填上的,檢查:
TBB_VER_FILE D:/tbb2018_20171205oss/include/tbb/tbb_stddef.h
最後點擊一次配置(configure)表單全白,出現configure done 的信息說明沒有問題。
4.寫在前面
在這個時候先別急着點生成(generate)留意一下配置的選項的每個選項的功能,以及配置的輸出信息,作爲一個之前從來沒用過CMake小白才明白CMake到底起着什麼樣的作用,也可以瞭解到openCV到底可以與哪些其他的庫結合進行編譯,或者如何修改定製滿足自己需求的庫。這個時候特別說明一下,由於之前電腦上安裝了Matlab2014a,在利用Cmake配置的時候,默認選上了Matlab相關的選項。但是在之後的VS2015編譯過程中總是因爲它而報錯,具體見:
http://answers.opencv.org/question/125939/solved-mexext-issues-compiling-32-with-cuda/
錯誤的形式爲:
同樣一些莫名其妙的錯誤全部出現在opencv_testXXX和opencv_perfXXX中,個人猜測這些應該和最後的生成庫沒有太大的關係(見名字就知道是性能測試所用)。如果和我一樣有強迫症不想看見紅叉叉,估計可以在配置Cmake的時候嘗試着不勾選BULID_PERF_TEST,但是,我沒有這麼做,在接下來的生成install中也沒有產生其他問題。
最後,如果一切就緒,點擊Generate生成VS2015工程文件。
5.VS2015工程編譯
進入生成的工程文件夾,點擊openCV.sln進入工程,裏面包含剛剛通過Cmake的相應選項產生的未編譯的工程,譬如在Cmake裏勾選了BUILD_CORE,裏面就會有opencv_core這個工程。同樣由於我們選擇了CUDA,裏面就會有很多關於CUDA的工程文件。這些工程生成的lib就是和我們從網上下載下來的lib之間的主要區別。
首先檢查自己的編譯器是否是和Cmake選擇的一致(譬如是64位不是32位),確定是debug版本還是release版本(如下圖),依照http://www.cnblogs.com/asmer-stone/p/5530868.html提示的方法,可以先試一試關鍵的幾個工程生成是否能夠通過,譬如opencv_core, opencv_cudabgsegm等等,如果出現問題可以節省時間去分析和查找。大概是openCV的版本不同,Cmake配置不同,工程數量以及後續出來的lib個數也不太一樣。不知道會不會在之後的使用過程中產生問題。
如果上述的一些關鍵工程編譯沒有什麼問題,那麼就可以直接生成all_build 和 install工程了,工程名右鍵->生成。
接下來就可以去幹幹別的事情了,譬如睡個午覺喝喝茶。。。估計整個的編譯過程在2到3小時。
在編譯的過程中我的電腦產生了大量的C4819警告,調查與編碼格式有關,關於這個問題個人沒有找到徹底的解決方法。(不要提什麼關閉警告忽略警告之類的,強迫症在此謝過了)
整體編譯完成後沒有生成失敗的項目,那麼基本上就應該沒有什麼太大的問題了。
6.重編譯庫的運用與測試
將工程文件夾下的install當成我們下載下來就可以使用的OpenCV庫就可以,配置方法相同,只不過是改個路徑而已,具體參見
openCV標準庫配置方法:http://blog.csdn.net/poem_qianmo/article/details/19809337
自編譯庫的配置方法:http://www.cnblogs.com/asmer-stone/p/5530868.html 參見其中的後半部分 包含測試程序等
最後,針對那麼多lib文件需要添加到鏈接器中的問題,也沒必要大費周章的寫個python腳本,DOS就可以解決了:
https://jingyan.baidu.com/article/ed15cb1b7220061be36981fa.html
7.參考資料
所有上述引用的網頁
http://www.cnblogs.com/freedomshe/archive/2013/01/11/win7_vs2012_opencv_rebuild.html