Ubuntu20.04编译OpenCV4.2时CMake检测不到已安装的cuDNN
OpenCV编译时CMake无法识别cuDNN的修复方案
问题根因
- 参数配置错误:CMake的
CUDNN_LIBRARY参数要求指向具体的动态库文件,而非库文件所在的目录。当前配置将路径设为/usr/local/cuda/lib64/目录,CMake无法从目录中读取库的版本元信息,最终检测到的版本号为空,对应日志里显示的Found unsuitable version ".."提示,判定为不满足cuDNN最低7.5的版本要求。 - 版本兼容问题:OpenCV 4.2自带的cuDNN自动探测逻辑发布时尚未适配cuDNN 8.x的版本宏定义格式,就算路径配置正确,也可能出现版本读取为空的检测失败情况。
具体修复步骤
- 修正CMake的cuDNN路径配置:
原错误写法:
替换为指向具体库文件的绝对路径:-D CUDNN_LIBRARY=/usr/local/cuda/lib64/
保留原-D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so-D CUDNN_INCLUDE_DIR=/usr/local/cuda/include参数即可。 - 若修正路径后仍提示版本检测不通过,直接绕开自动探测流程,手动传入cuDNN版本参数。在CMake命令中追加以下参数,手动声明cuDNN的版本信息:
-D CUDNN_VERSION="8.1.0" -D CUDNN_MAJOR=8 -D CUDNN_MINOR=1 -D CUDNN_PATCHLEVEL=0 - 清空旧的CMake缓存:之前配置失败时生成的缓存文件会记录错误的检测结果,哪怕修正参数也会复用旧值。因此需要完全删除build目录下的所有文件(包括
CMakeCache.txt、CMakeFiles目录),在空的build目录下重新执行CMake配置。 - 配置完成后核对CMake输出日志,确认cuDNN项显示为YES,且版本识别正确后,再执行编译安装流程。
注意事项
- 无需将cuDNN的头文件、库文件复制到其他系统目录,保持现有目录结构即可正常识别。
- 当前使用的CUDA 11.2与cuDNN 8.1.0.77为官方匹配组合,不存在底层版本不兼容的问题。
内容的提问来源于stack exchange,提问作者Adstra
相关产品推荐
相关产品推荐

