Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake:编译OpenCV时未找到CUDA库_C++_Opencv_Cmake - Fatal编程技术网

C++ CMake:编译OpenCV时未找到CUDA库

C++ CMake:编译OpenCV时未找到CUDA库,c++,opencv,cmake,C++,Opencv,Cmake,我正在使用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_LIBRA

我正在使用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_CUBLAS”,上述输出将再添加一个
CUDA_CUBLAS_库
错误

但在所有这些错误消息之前,它显示

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

多亏了评论中的提示,我解决了这个问题。为了结束这个问题,我在回答我自己的问题

这是一个“Win32或x64”体系结构问题。由于NVIDIA仅为x64提供
Cuft
nvblas
nppc
nppi
NPP
LIB,CMAKE自然无法找到这些LIB来配置Win32 OpenCV库

我的解决方案是在CMAKE中选择Visual Studio 11 Win64而不是Visual Studio 11作为生成器。这样,CMAKE将自动从
\lib\x64
而不是
\lib\Win32
加载lib。此外,我还需要加载64位版本的OpenCV所需的所有其他LIB,例如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将尝试寻找一些第三方LIB以支持更多功能:

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

从那以后,我知道我曾经安装过CUDA v9.0,但是我仍然得到了这个未找到的opencv_dep_CUDA_nppi_库错误,所以我在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:/Program Files/NVIDIA GPU Computing TOOLKIT/CUDA/v8.0
然后我重新配置了它。成功了

您是针对x86还是x86_64体系结构进行配置?有没有理由不使用预编译二进制文件和使用4年前的编译器?我不知道如何在CMAKE中选择x86或x86_64。我认为这是在使用MSVC编译整个项目的阶段。至于VS2012,我现在正在使用它,它仍然可以正常工作。@DropNope,生成的项目中只有一个平台。如果您使用的是cmake gui,您可以在第一次需要删除cmake缓存(在菜单“文件”中)时单击“配置”后,在弹出窗口中选择“工具链+平台”,或仅删除build Wilder以再次选择另一个平台。Nvidia仅为64位平台提供
cufft
nppi
(检查
\lib\
文件夹)。那怎么办?谢谢,伙计。这是一个架构问题。我将生成器从
VisualStudio11
更改为
VisualStudio11Win64
,并且
cufft
和所有其他LIB都可用于CMAKE。我现在正在为64位编译它。仅供参考,我自己编译它,因为预构建的OpenCV库不包含所有CUDA函数。@谢谢您的解决方案。我在使用VS14和CUDA工具包v7.5时也遇到了同样的问题。当我改为x64时,CMake找到了库。对于我们这些刚接触CMake GUI的人,请注意,您需要为x64构建创建一个新的构建目录,然后单击“配置”按钮时,它将为您提供选择64位编译器的选项。然后一切都很顺利。或者在更改架构之前,只需单击
文件|删除缓存
)我也有同样的问题,但使用VS 2017、Cmake 3.10和CUDA 9.0。这个解决方案对我不起作用!仍然是CUDA_nppi_LIBRARY-NOTFOUND和CUDA_nvcuvenc_LIBRARY-NOTFOUND@sgira我认为这是两个不同的问题。(1) 我注意到,
nppi
未包含在CUDA 9中,或至少未作为其原始形式。这是一个值得尝试的解决方案。(2) 自从OpenCV 3.0以来,我一直无法使用
NVCUVID
功能进行编译,因为我的机器上没有NVNC SDK。在CMake中使用_NVCUVID禁用
,可以避免此类不便。就我而言,我可以补充一点,您应该在同一驱动器上安装CUDA、Visual Studio和CMake。当我在驱动器C和驱动器D上安装CUDA和Cmake时,Cmake无法找到CUDA。