CMake:编译OpenCV时未找到CUDA库

s1ag04yj  于 2023-01-26  发布在  其他
关注(0)|答案(3)|浏览(207)

我正在使用CMAKE在Windows上编译支持CUDA的OpenCV 3.0.0。当我单击“配置”时,出现如下错误:

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 x64,Visual Studio 2012,CMAKE 3.4.0,CUDA工具包7.5

uurity8g

uurity8g1#

多亏了评论中的提示,我解决了这个问题。为了结束这个问题,我回答了我自己的问题。
这是一个“Win32 or x64”架构的问题,由于NVIDIA只提供cufftnvblasnppcnppinpps的x64库,CMAKE自然不可能找到这些库来配置Win32 OpenCV库。
我的解决方案是选择Visual Studio 11 Win64而不是Visual Studio 11作为CMAKE中的生成器。这样CMAKE将自动从<CUDA_DIR>\lib\x64而不是<CUDA_DIR>\lib\Win32加载库。此外,我还需要加载OpenCV在64位版本中所需的所有其他库。比如OpenGL。我还需要在x64架构下编译OpenCV。我将来要写的所有代码都只能在x64下编译和调试。
如果您在阅读中文资料方面没有问题,我很乐意提供一个link,以帮助您完成在VS2012上构建OpenCV 3.0并支持CUDA的完整指南。

f87krz0w

f87krz0w2#

对于Linux,我通过这些步骤解决:
(1)检查lib文件夹中的.so文件,例如“cuda 7-cudnn 3/lib 64”
(2)使符号链接类似于sudo ln -s libcublas.so.7.5.18 libcublas.so
对于我的情况,我把正确的链接在“CMakeLists.txt”和“Makefile.config”,但没有一个.so文件。

yduiuuwa

yduiuuwa3#

它确实与版本有关!!!如果你想用Cuda编译,当你cmake opencv 2413时,你会注意到makefile会试图找到一些第三方库来支持更多的函数:

CUDA_TOOLKIT_ROOT_DIR C:/程序文件/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中得到了libnppi.lib;所以我改变了环境路径,

CUDA_TOOLKIT_ROOT_DIR C:/程序文件/NVIDIA GPU计算工具包/CUDA/v8.0然后我重新配置了它。它工作了!!

相关问题