TmZ*_*mZn 3 c++ opencv cuda cmake visual-studio
我目前正在尝试使用CUDA 9.0RC编译OpenCV 3.3,但无法使其全部工作.(在Windows上编译,使用CMake 3.9和Visual Studio 2017,适用于x64 Windows)
首先,如果我尝试在没有CUDA的情况下编译OpenCV,一切正常.
之后,我在CMake中添加了"WITH CUDA"选项,包含所有正确的路径,Visual Studio给出了这个错误:
9>------ Build started: Project: opencv_world, Configuration: Release x64 ------
9>Building NVCC (Device) object modules/world/CMakeFiles/cuda_compile.dir/__/core/src/cuda/Release/cuda_compile_generated_gpu_mat.cu.obj
9>nvcc fatal : Unsupported gpu architecture 'compute_20'
9>CMake Error at cuda_compile_generated_gpu_mat.cu.obj.cmake:206 (message):
9> Error generating
9> C:/OpenCV-3.3.0/opencv-3.3.0/build/modules/world/CMakeFiles/cuda_compile.dir/__/core/src/cuda/Release/cuda_compile_generated_gpu_mat.cu.obj
Run Code Online (Sandbox Code Playgroud)
认为这是一个"ARCH"问题,我试图改变,在CMake中:
CUDA_ARCH_BIN : 2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1
Run Code Online (Sandbox Code Playgroud)
至 :
CUDA_ARCH_BIN : 6.0 6.1
Run Code Online (Sandbox Code Playgroud)
(因为我使用的是1080)
和Visual Studio现在给我这个错误:
6>------ Build started: Project: opencv_world, Configuration: Release x64 ------
6>Building NVCC (Device) object modules/world/CMakeFiles/cuda_compile.dir/__/core/src/cuda/Release/cuda_compile_generated_gpu_mat.cu.obj
6>gpu_mat.cu
6>'bin' is not recognized as an internal or external command,
6>operable program or batch file.
6>CMake Error at cuda_compile_generated_gpu_mat.cu.obj.cmake:206 (message):
6> Error generating
6> C:/OpenCV-3.3.0/opencv-3.3.0/build/modules/world/CMakeFiles/cuda_compile.dir/__/core/src/cuda/Release/cuda_compile_generated_gpu_mat.cu.obj
Run Code Online (Sandbox Code Playgroud)
我不知道这个"垃圾箱"来自哪里,我真的不知道我应该做些什么来使它工作..
谢谢你的回复!
错误是因为主机编译器的路径错误.它在CMake中指定为CUDA_HOST_COMPILER:$(VCInstallDir)/bin.由于这是文件夹的路径(实际上它是一个非现有文件夹),而不是exe,因此构建失败.
这可能是因为MSVC 2017有一个新的,更复杂的bin文件夹路径.它曾经是:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
新路径是这样的,并且将根据您拥有的MSVC版本而有所不同:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64
更多信息在这里.这个变化有一个很好的逻辑论据,但它可能打破了大量尚未更新的构建脚本.
您可以通过将变量设置为强制来强制它,例如:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe
您可能会收到目标操作系统不受支持的错误(即使它应该与CUDA 9一起使用).
7>nvcc fatal : Host compiler targets unsupported OS.
有两个修复方法.
1)如果你有最新的MSVC 2017,你需要欺骗CUDA接受它,因为它是1911年版,而不是1910年.
打开C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include\crt\host_config.h并找到这一行:
#if _MSC_VER < 1600 || _MSC_VER > 1910
更改1910到1911.
2)在CMake中,添加--cl-version=2017到CUDA_NVCC_FLAGS.我不确定是否需要它,但它不会受到伤害.
这对我来说似乎已经成功了.您可能还需要禁用性能测试.您还会发现ncuvid.h此刻不存在,无论是否改变位置我都不知道.这可以防止建筑opencv_cudacodec,但我怀疑这对大多数人来说不是问题.
| 归档时间: |
|
| 查看次数: |
5131 次 |
| 最近记录: |