OpenCV赢得';即使在CMake中使用_CUDA=ON,也不能使用CUDA构建
我曾尝试使用CMake(gui版本)构建OpenCV 3.1,以启用Cuda。我已经安装了Cuda版本7.5 64位,CMake会自动找到Cuda工具包的正确路径。我确保WITH_CUDA值设置为ON,然后按configure。这就是我对Cuda的看法:OpenCV赢得';即使在CMake中使用_CUDA=ON,也不能使用CUDA构建,opencv,visual-studio-2013,cmake,Opencv,Visual Studio 2013,Cmake,我曾尝试使用CMake(gui版本)构建OpenCV 3.1,以启用Cuda。我已经安装了Cuda版本7.5 64位,CMake会自动找到Cuda工具包的正确路径。我确保WITH_CUDA值设置为ON,然后按configure。这就是我对Cuda的看法: CUDA detected: 7.5 CUDA NVCC target flags: -gencode;arch=compute_20,code=sm_20;-gencode;arch=compute_20,code=sm_21;-gencod
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
...
Extra dependencies: comctl32 gdi32 ole32 setupapi ws2_32 vfw32 cudart nppc nppi npps cufft -LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/lib/x64
...
Other third-party libraries:
Use IPP: 9.0.1 [9.0.1]
at: C:/OpenCV-3.1.0/opencv/sources/3rdparty/ippicv/unpack/ippicv_win
Use IPP Async: NO
Use Eigen: NO
Use Cuda: YES (ver 7.5)
Use OpenCL: YES
Use custom HAL: NO
NVIDIA CUDA
Use CUFFT: YES
Use CUBLAS: NO
USE NVCUVID: NO
NVIDIA GPU arch: 20 21 30 35
NVIDIA PTX archs: 30
Use fast math: YES
然后我使用Visual Studio 12 2013 Win64生成
接下来,我在Visual Studio 2013中打开新生成的OpenCV.sln项目并构建该项目。它完成时没有任何错误,但出现如下103个警告:
LINK : warning LNK4044: unrecognized option '/LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/lib/x64'; ignored
OpenCV构建得很好,我可以用它构建程序。我还可以包括“opencv2/core/cuda.hpp”,没有任何问题。但是,当我尝试使用cuda::getDevice()时,会出现以下错误:
OpenCV Error: No CUDA support (The library is compiled without CUDA support) in throw_no_cuda, file C:\builds\master_PackSlave-win64-vc12-shared\opencv\modules\core\include\opencv2/core/private.cuda.hpp, line 97
当我从cv::getBuildInformation()打印信息时,我得到:
看起来Cuda在这个过程中被禁用了,但我不知道为什么。我多次尝试重新配置和重建,结果都是一样的。我希望能在这方面得到一些帮助 问题在于CMake:它为Visual Studio生成了错误的链接选项
LINK : warning LNK4044: unrecognized option '/LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/lib/x64'; ignored
它应该是“LIBPATH:C:”而不是“LC:”
要解决此问题,请执行以下操作:
- 使用CMake生成解决方案
- 转到生成目录
- 打开一个IDE/文本编辑器,可以在此目录中进行全局搜索
- 对于任何文件中出现的“-LC:”,请将其替换为“-LIBPATH:C:”
foreach(p ${CUDA_LIBS_PATH})
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} -L${p})
endforeach()
不是使用“${CMAKE\u LIBRARY\u PATH\u FLAG}”自动放置-LIBPATH,而是有人放置“-L”
因此,要解决这个问题:
- 打开CMakeLists.txt
- 将“-L”替换为“${CMAKE\u LIBRARY\u PATH\u FLAG}”
希望这会有帮助 如Dubrzr所说,在手动编辑CMakeLists.txt之后,您可以使用Cuda成功编译OpenCV
如果直接从github下载并编译OpenCV,也会得到相同的结果。它已被修复。是否使用CMake Gui?如果没有。试试看,它会告诉你需要哪些目录以及它们是否被找到/更正是的,我使用gui版本和所有与cuda相关的东西(至少我在问题中提到过)似乎是正确的。选项
-LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/lib/x64
的格式看起来像是被gcc
或其他Linux编译器(可能在MinGW下)使用的。您确定已安装的CUDA是使用cl
编译器编译的,因此可以通过VS project链接它吗?@Tsyvarev我如何知道它是否是?我知道我可以在VS中构建和运行与OpenCV无关的Cuda项目,没有任何问题。好的,所以你们的Cuda安装与VS兼容。那个么,问题在于其他方面。
foreach(p ${CUDA_LIBS_PATH})
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} -L${p})
endforeach()