Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
OpenCV赢得';即使在CMake中使用_CUDA=ON,也不能使用CUDA构建_Opencv_Visual Studio 2013_Cmake - Fatal编程技术网

OpenCV赢得';即使在CMake中使用_CUDA=ON,也不能使用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

我曾尝试使用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;-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:”
============================

我在CMakeLists.txt中发现了问题:

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}”
使用CMake配置和生成解决方案,并使用VS编译


希望这会有帮助

如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()