Ubuntu18.04下CMake无法识别本地OpenCV3.4.1,误找3.4.0问题
问题解答
1. 为什么CMake会尝试寻找OpenCV 3.4.0而非3.4.1?
这大概率是几个常见原因导致的:
- 残留的CMake缓存:你之前可能在这个项目里运行过CMake,当时指向的是旧版本的OpenCV 3.4.0,生成的
CMakeCache.txt里保存了旧路径,CMake默认会复用这些缓存信息,而不是重新搜索。 - 环境变量设置不到位或优先级问题:虽然你设置了
OPENCV_ROOT,但OpenCV_DIR需要指向OpenCV安装目录下的share/OpenCV子目录(这里存放着CMake识别用的OpenCVConfig.cmake),如果你的OpenCV_DIR没设对,或者系统默认搜索路径(比如/usr/local/share/OpenCV)里有旧版本的配置文件,CMake会优先找到旧的。 - 系统中存在旧版本OpenCV:你可能之前在
/usr/local下安装过OpenCV 3.4.0,CMake的默认搜索顺序会优先检查系统标准路径,所以先找到了旧版本的库和配置。 - 依赖传递问题:如果你的项目依赖的其他第三方库是基于OpenCV 3.4.0编译的,CMake在解析这些依赖时会间接引入旧版本的OpenCV路径。
2. 如何修复,确保CMake指向正确的OpenCV版本?
可以按以下步骤逐一排查修复:
步骤1:清理CMake缓存,从头开始
首先删除项目build目录下的CMakeCache.txt以及所有生成的文件,彻底清除旧配置的影响:
# 进入你的项目build目录 cd /path/to/your/project/build rm -rf *
步骤2:正确设置环境变量
确保OpenCV_DIR指向你安装的3.4.1的配置文件目录,在终端运行:
export OPENCV_ROOT=/home/m/locals/opencv export OpenCV_DIR=${OPENCV_ROOT}/share/OpenCV # 可选:把OpenCV的lib目录加入动态库搜索路径,避免运行时出错 export LD_LIBRARY_PATH=${OPENCV_ROOT}/lib:$LD_LIBRARY_PATH
之后再重新运行CMake命令。
步骤3:在CMake脚本中显式指定版本和路径
直接在你的CMakeLists.txt里硬指定OpenCV的路径和版本,避免依赖环境变量的不确定性:
# 强制指定OpenCV的根目录 set(OPENCV_ROOT "/home/m/locals/opencv" CACHE PATH "Path to OpenCV 3.4.1 installation") # 指定CMake配置文件的路径 set(OpenCV_DIR "${OPENCV_ROOT}/share/OpenCV") # 明确要求寻找3.4.1版本,不匹配就报错 find_package(OpenCV 3.4.1 REQUIRED)
步骤4:运行CMake时手动指定前缀路径
如果上面的方法还是不行,可以在运行CMake时通过CMAKE_PREFIX_PATH参数强制让CMake优先搜索你的OpenCV路径:
cmake -DCMAKE_PREFIX_PATH=/home/m/locals/opencv -DOpenCV_DIR=/home/m/locals/opencv/share/OpenCV ..
步骤5:移除系统中的旧版本(可选)
如果系统里的旧版本OpenCV对你没用,可以彻底卸载它,避免后续混淆:
# 如果你是通过源码编译安装的旧版本,进入旧版本的build目录执行 sudo make uninstall # 清理残留的配置文件 sudo rm -rf /usr/local/lib/libopencv_* /usr/local/include/opencv* /usr/local/share/OpenCV
内容的提问来源于stack exchange,提问作者mans
相关产品推荐
相关产品推荐

