【发布时间】:2018-05-21 11:11:53
【问题描述】:
我正在使用 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
表示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
【问题讨论】:
-
您是针对 x86 还是 x86_64 架构进行配置?是否有理由不使用预编译的二进制文件并使用 4 年前的编译器?
-
我不确定如何在 CMAKE 中选择 x86 或 x86_64。我认为它处于使用 MSVC 编译整个项目的阶段。至于VS2012,我现在在用,还是可以的。@Drop
-
不,生成的项目中只有一个平台。如果您使用的是cmake-gui,您可以在第一次单击配置后在弹出窗口中选择工具链+平台您需要删除cmake缓存(在菜单“文件”中),或者只需删除构建傻瓜即可再次选择另一个平台。 Nvidia 仅提供
cufft和nppi用于 64 位平台(检查<CUDA_DIR>\lib\<platform>文件夹)。 -
谢谢,伙计。这是一个架构问题。我将生成器从
Visual Studio 11更改为Visual Studio 11 Win64和cufft,并且所有其他库都可用于CMAKE。我现在正在为 64 位编译它。仅供参考,我正在自己编译它,因为预构建的 OpenCV 库不包含所有 CUDA 函数。@Drop