2015-10-13 219 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