mar*_*stp 4 opencv cmake visual-studio-2013
我尝试使用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
Run Code Online (Sandbox Code Playgroud)
然后我使用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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
当我从cv :: getBuildInformation()打印信息时,我得到:
Other third-party libraries:
Use IPP: 9.0.1 [9.0.1]
at: C:\builds\master_PackSlave-win64-vc12-shared\opencv\3rdparty/ippicv/unpack/ippicv_win
Use IPP Async: NO
Use Eigen: NO
Use Cuda: NO
Use OpenCL: YES
Use custom HAL: NO
Run Code Online (Sandbox Code Playgroud)
似乎Cuda在这个过程的某个地方被禁用了,但我无法弄清楚原因.我试图用相同的结果重新配置和重建几次.会喜欢这方面的帮助!
问题是CMake:它为Visual Studio生成错误的链接选项.
LINK : warning LNK4044: unrecognized option '/LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/lib/x64'; ignored
Run Code Online (Sandbox Code Playgroud)
它应该是"LIBPATH:C:"而不是"LC:".
解决问题:
=========编辑=========
我发现了问题,它在CMakeLists.txt中:
foreach(p ${CUDA_LIBS_PATH})
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} -L${p})
endforeach()
Run Code Online (Sandbox Code Playgroud)
而不是使用"$ {CMAKE_LIBRARY_PATH_FLAG}"自动放-LIBPATH,有人把"-L"...
所以解决它:
使用CMake配置和生成解决方案并使用VS进行编译.
希望它会有所帮助!
| 归档时间: |
|
| 查看次数: |
1843 次 |
| 最近记录: |