为什么CMake已找到OpenCV但make编译时gcc找不到opencv.hpp文件
问题原因
- 手动配置的头文件路径错误:你在
.bashrc中导出的OPENCV4_INCLUDES值为/usr/local/include/,但你的OpenCV头文件实际存放在/usr/local/include/opencv4路径下,编译器在/usr/local/include/下找不到opencv2/opencv.hpp对应的文件路径 - 错误使用自定义变量替代find_package导出的标准变量:
find_package(OpenCV REQUIRED)执行成功后,OpenCV的官方CMake配置会自动导出OpenCV_INCLUDE_DIRS(正确的头文件路径)、OpenCV_LIBS(需要链接的库文件列表)两个标准变量,你不需要自行在系统环境变量中定义相关参数,你自定义的OPENCV4_INCLUDES变量本身路径错误,反而会覆盖正确路径 PATH环境变量仅用于系统查找可执行文件,把头文件、库文件路径加入PATH没有任何作用- CMakeLists.txt中
target_link_libraries为空,即使头文件问题解决,后续链接阶段也会报错
解决方案
- 先删除
.bashrc中你手动添加的4行OpenCV相关环境变量配置,执行source ~/.bashrc让配置生效 - 替换你的CMakeLists.txt内容为以下内容:
cmake_minimum_required(VERSION 3.0) project(cpp_proj) find_package(OpenCV REQUIRED) add_executable(cpp_proj opencv_cpp.cpp) # 直接使用find_package导出的正确头文件路径 include_directories(${OpenCV_INCLUDE_DIRS}) # 链接OpenCV对应的库文件 target_link_libraries(cpp_proj ${OpenCV_LIBS})
- 清空build目录下的所有旧缓存文件,重新执行
cmake .. && make即可正常编译
内容的提问来源于stack exchange,提问作者crackanddie
相关产品推荐
相关产品推荐

