繁体   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