2015-10-13 745 views
4

我使用CMAKE在Windows上編譯OpenCV 3.0.0並使用CUDA支持。當我點擊「配置」,會出現錯誤如下:CMake:編譯OpenCV時未找到CUDA庫

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 

指示CUDA可以通過CMake的被檢測到。但是,這4個庫需要找不到。

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

我不知道即使我手動設置這些值,我應該怎麼做?

我的規格:Windows 7的64位時,Visual Studio 2012,CMake的3.4.0,CUDA工具包7.5

+2

您是否針對x86或x86_64架構進行配置?是否有理由不使用預編譯的二進制文件並使用4年的編譯器? – Drop

+0

我不確定如何在CMAKE中選擇x86或x86_64。我認爲它正處於使用MSVC編譯整個項目的階段。至於VS2012,我現在使用它,它仍然正常工作。@ Drop –

+1

不,在生成的項目中只會有一個平臺。如果您正在使用cmake-gui,您可以在首次單擊「配置」後彈出選擇工具鏈+平臺。您需要刪除cmake緩存(在菜單「文件」中),或者刪除構建傻瓜以便能夠再次選擇另一個平臺。 Nvidia只爲64位平臺提供'cufft'和'nppi'(檢查' \ lib \ '文件夾)。 – Drop

回答

15

由於在評論來自跌落的提示,我解決了這個問題。爲了解決這個問題,我正在回答我自己的問題。

這是一個「Win32或x64」體系結構問題。由於NVIDIA僅爲x64提供了cufft,,nppc,nppi,npps libs,因此CMAKE自然不可能找到用於配置Win32 OpenCV庫的這些庫。

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


一個應該沒有問題,閱讀中國材料,我很高興能提供一個link朝後關於對VS2012建設的OpenCV 3.0 CUDA支持完整的指南。

+0

感謝您的解決方案。我使用VS 14和CUDA Toolkit v7.5也遇到同樣的問題。當我更改爲x64時,CMake找到了這些庫。對於我們這些剛接觸CMake GUI的人來說,您需要爲x64構建創建一個新的構建目錄,然後在點擊配置按鈕時,它將爲您提供選擇64位編譯器的選項。然後,一切都爲我順利進行。 – OnTheContrary

+0

或者只需點擊File |刪除緩存'之前更改架構:) –

+0

我有同樣的問題,但使用VS 2017,Cmake 3.10和CUDA 9.0。該解決方案對我無效! 仍然CUDA_nppi_LIBRARY-NOTFOUND和CUDA_nvcuvenc_LIBRARY-NOTFOUND – sgira