编译OpenCV时没有找到CUDA库

CMake: CUDA libraries not found when compiling OpenCV

本文关键字:CUDA OpenCV 编译      更新时间:2023-10-16

我正在Windows上编译具有CUDA支持的OpenCV 3.0.0,使用CMAKE。当我点击"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"answers"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

表示CMAKE可以检测到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 in comments的提示,我解决了这个问题。为了结束这个问题,我在回答我自己的问题。

这是一个"Win32或x64"架构问题。由于NVIDIA仅为x64提供cufft, nvblas, nppc, nppi, npps库,因此CMAKE自然不可能找到这些库来配置Win32 OpenCV库。

我的解决方案是选择Visual Studio 11 Win64而不是Visual Studio 11作为CMAKE中的生成器。这样CMAKE将自动从<CUDA_DIR>libx64而不是<CUDA_DIR>libWin32加载库。此外,我还需要加载64位版本的OpenCV所需的所有其他库,例如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"answers" makeffile .config",但没有.so文件。

这真的和版本有关!!如果你想用Cuda编译,当你制作opencv2413时,你会注意到makefile会尝试寻找一些第三方库来支持更多的功能:

CUDA_TOOLKIT_ROOT_DIR C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0

从中,我知道我曾经安装过CUDA v9.0,但我仍然没有找到opencv_dep_CUDA_nppi_LIBRARY错误,所以我在C:Program FilesNVIDIA GPU计算工具包CUDAv9.0libx64中寻找它,我确实无法得到它的名字是nppi。lib,所以只是为了测试,我创建了一个空文件并将其命名为nppi。lib,正如我猜的那样,我工作了,但事实上,这还不够,测试无法帮助编译opencv,此外,我发现我有CUDA v8,令人惊讶的是,我得到了libnppi。lib in C:Program FilesNVIDIA GPU计算工具包CUDAv8.0libx64;所以我改变了环境路径

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