VS2017编译OpenCV3.4+CUDA9.2遇CMake错误求解决方案
解决OpenCV + CUDA编译DLL的CMake报错问题
我之前也碰到过几乎一模一样的问题,折腾了好几天才搞定,结合你的环境和报错情况,给你几个亲测有效的解决思路:
1. 先搞定版本兼容性问题
OpenCV 3.4对CUDA、VS的版本匹配要求很严格,你试了好几个CUDA版本但可能没踩对适配点:
- OpenCV 3.4.x(尤其是3.4.0到3.4.5)最稳定的搭配是CUDA 9.1,CUDA 9.2在CMake 3.11下支持不完善,CUDA 8.0根本不兼容VS2017(它只支持到VS2015)
- 卸载所有已装的CUDA版本,干净安装CUDA 9.1,安装时一定要选自定义安装,务必勾选「Visual Studio Integration」组件——这一步90%的人都会漏,直接导致VS识别不到CUDA
2. 彻底清理CMake缓存再重新配置
CMake的缓存会记住之前错误的路径,这是很多人反复踩坑的原因:
- 打开CMake GUI,先点
File -> Delete Cache,把之前的配置全清掉 - 重新设置OpenCV源码路径和build输出路径
- 点击
Configure,选择VS2017 x64生成器,等第一次配置跑完 - 在变量列表里手动指定正确路径:
CUDA_TOOLKIT_ROOT_DIR=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1CUDA_SDK_ROOT_DIR=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.1(这是CUDA示例的默认路径,找不到的话可以去NVIDIA文件夹里找)
- 再点
Configure,直到所有红色选项消失,最后点Generate生成VS项目
3. 调整CUDA相关编译选项减少报错
在CMake里设置这些选项能避开很多坑:
- 勾选
WITH_CUDA,确保启用CUDA支持 - 只勾选你项目需要的CUDA模块(比如
BUILD_opencv_cudacodec、BUILD_opencv_cudaobjdetect),不用全选,减少编译压力 - 设置
CUDA_ARCH_BIN为你的GPU架构版本(比如GTX10系列是6.1,RTX20系列是7.5,可以去NVIDIA官网查自己GPU的Compute Capability) - 取消勾选
BUILD_TESTS和BUILD_EXAMPLES,省时间还能避免不必要的编译错误
4. 检查系统环境变量和VS配置
- 确保系统环境变量里有
CUDA_PATH和CUDA_PATH_V9_1,并且%CUDA_PATH%\bin在PATH最前面,避免其他版本的CUDA干扰 - 打开VS2017,随便建个空C项目,检查项目属性的「VC目录」:
- 包含目录要加
$(CUDA_PATH)\include - 库目录要加
$(CUDA_PATH)\lib\x64
- 包含目录要加
5. 编译时的小技巧
- 生成VS项目后,一定要选Release模式编译(Debug模式编译CUDA模块慢到离谱,还容易出链接错误)
- 右键解决方案里的
INSTALL项目,选择「生成」,它会自动把编译好的DLL和头文件打包到指定目录 - 如果遇到链接错误,先清理VS项目缓存(点
Build -> Clean Solution)再重新编译
我当时就是靠这些步骤解决的,之前也是因为版本不匹配和CMake缓存没清一直卡着,希望这些能帮你顺利编译出带CUDA的OpenCV DLL!
内容的提问来源于stack exchange,提问作者DrSushi
相关产品推荐
相关产品推荐

