簡體   English   中英

CMake:編譯OpenCV時找不到CUDA庫

[英]CMake: CUDA libraries not found when compiling OpenCV

我正在使用CMAKE在Windows上使用CUDA支持編譯OpenCV 3.0.0。 單擊“configure”時,會發生以下錯誤:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_cufft_LIBRARY (ADVANCED)
    linked by target "opencv_hal" in directory E:/dev-lib/opencv3/sources/modules/hal
    ...
CUDA_nppc_LIBRARY (ADVANCED)
    ...
CUDA_nppi_LIBRARY (ADVANCED)
    ...
CUDA_npps_LIBRARY (ADVANCED)

我在條目中檢查了“WITH_CUDA”和“WITH_CUFFT”。 如果我也檢查“WITH_CUBLAS”,上面的輸出將再添加一個CUDA_cublas_LIBRARY錯誤。

但在所有這些錯誤消息之前,它表明了這一點

CUDA detected: 7.5
CUDA NVCC target flags: -gencode;arch=compute_20,code=sm_20;-gencode;arch=compute_20,code=sm_21;-gencode;arch=compute_30,code=sm_30;-gencode;arch=compute_35,code=sm_35;-gencode;arch=compute_30,code=compute_30

這表明CUDKE可以檢測到CUDA。 但是,找不到所需的4個庫。

我之前已經安裝了CUDA 7.5並使用Visual Studio 2012進行了編譯。 CUDA樣品運行完美。 所以我的CUDA庫應該正確安裝。

我想知道即使我必須手動設置這些值,我該怎么辦呢?

我的規格:Windows 7 x64,Visual Studio 2012,CMAKE 3.4.0,CUDA Toolkit 7.5

感謝評論中Drop的提示,我解決了這個問題。 為了結束這個問題,我正在回答我自己的問題。

這是一個“Win32或x64”架構問題。 由於NVIDIA僅為x64提供cufftnvblasnppcnppinpps libs,因此CMAKE自然無法找到這些用於配置Win32 OpenCV庫的庫。

我的解決方案是在CMAKE中選擇Visual Studio 11 Win64而不是Visual Studio 11作為生成器。 這樣CMAKE將自動從<CUDA_DIR>\\lib\\x64而不是<CUDA_DIR>\\lib\\Win32加載庫。 此外,我還需要加載OpenCV在64位版本中所需的所有其他庫,例如OpenGL。 我還需要在x64架構中編譯OpenCV。 我將來要寫的所有代碼都只需要在x64中構建和調試。


如果您在閱讀中文資料時沒有遇到任何問題,我很樂意提供一個關於在VS2012上使用CUDA支持構建OpenCV 3.0的完整指南的帖子鏈接

對於Linux,我通過這些步驟解決了:

(1)檢查lib文件夾中的.so文件,例如cuda7-cudnn3 / lib64

(2)使用像sudo ln -s libcublas.so.7.5.18 libcublas.so這樣的符號鏈接

對於我的情況,我在CMakeLists.txt和Makefile.config中正確鏈接,但沒有.so文件。

它真的與版本有關!!! 如果你想用Cuda編譯,當你使用opencv2413時,你會發現makefile會試圖找到一些第三方庫來支持更多的功能:

CUDA_TOOLKIT_ROOT_DIR C:/ Program Files / NVIDIA GPU計算工具包/ CUDA / v9.0

從那以后,我知道我曾經安裝過CUDA v9.0,但我仍然沒有找到opencv_dep_CUDA_nppi_LIBRARY錯誤,所以我在C:\\ Program Files \\ NVIDIA GPU Computing Toolkit \\ CUDA \\ v9.0 \\ lib \\ x64中找到它,我做的不能得到它的名字是nppi.lib ,所以只是為了測試,我創建一個空文件,並將其命名為nppi.lib ,因為我猜,我工作,但實際上,這還不夠,測試可以無法編譯opencv,更多,我發現我有CUDA v8,而且很奇怪,我在C:\\ Program Files \\ NVIDIA GPU Computing Toolkit \\ CUDA \\ v8.0 \\ lib \\ x64中獲得了lib nppi.lib ; 所以我改變了我的環境路徑,

CUDA_TOOLKIT_ROOT_DIR C:/ Program Files / NVIDIA GPU Computing Toolkit / CUDA / v8.0然后我重新配置了它。 有效!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM