前言
OpenCV接觸也有六七年了,沒想到還能折在這... 組內新配的服務器,打算編譯cuda版本opencv,花了一天才全部搞定.....
一、 CUDA_nppicom_LIBRARY are used in this project, but they are set to NOTFOUND

解決辦法
具體見上一篇文章Opencv-GPU 編譯錯誤 CUDA_nppicom_LIBRARY (ADVANCED) 未定義
二、 nvcc fatal : Unsupported gpu architecture 'compute_86'

查詢官網,3080顯卡的算力是8.6,設置8.6並沒有問題. 機器的CUDA是用apt命令安裝的,親測確實是這個導致。
解決辦法
- 卸載
執行如下命令
sudo apt-get autoremove nvidia-cuda-toolkit nvidia*
- 從官網下載CUDA包,安裝即可。
三、 CMake Error: Cannot determine link language for target "ade".
如圖,應該是下載python-ide失敗。

解決辦法
這里手動到github頁面(https://github.com/opencv/ade/releases)下載到本地,然后在opencv根目錄/modules/gapi/cmake/DownloadADE.cmake里更改ADE_root為本地路徑。具體如圖:

四、 fatal error: nvcuvid.h: No such file or directory

這個頭文件在cuda10 以后就被棄了,所以即使裝完CUDA也缺失。
解決辦法
可以從NVIDIA下載NVIDIA Video Codec SDK 獲取, 然后放入系統的/usr/includes路徑。具體文件如圖:

五、/usr/bin/ld: cannot find -ltrue

這個問題就絕了,缺少true庫,但是找了半天,並沒有聽說過libtrue.so這個庫...
受到issusBuild opencv with cuda error : /usr/bin/ld: cannot find -ltrue #19794啟發,這個問題是-D CUDA_nppicom_LIBRARY=true導致的,這個變量由於版本變動未定義,所以我們加了這一句。但是true導致在鏈接庫時導致找不到。
解決辦法
抖機靈隨意找了一個系統肯定有的庫stdc++,把原來的-D CUDA_nppicom_LIBRARY=true 改成-D CUDA_nppicom_LIBRARY=stdc++ 大功告成!


六、將編譯的Opencv安裝到Anacodna虛擬環境
在編譯通過后,可以修改cmake命令,使得安裝二進制文件到指定的python環境文件目錄。
- 激活虛擬環境
source activate 環境名稱,主要是為了獲取虛擬環境的路徑,如果知道可以直接替換;- OPENCV_PREFIX=$(python -c "import sys; print(sys.prefix)")
- cmake -DCMAKE_INSTALL_PREFIX=${OPENCV_PREFIX} .. && make install
