macOS通过Homebrew安装OpenCV后CMake调用pkg-config链接报错如何解决
问题原因
- CMake配置未传递OpenCV库文件的搜索路径给链接器,brew安装的OpenCV默认存放在非系统默认的链接路径下,仅传递库名的情况下链接器无法定位到对应文件
- 当前使用的
${OPENCV4_LIBRARIES}变量仅包含库名称,不携带路径信息,缺少-L对应的搜索路径参数
修复方案
方案1:补充链接路径(最小修改现有配置)
在target_link_libraries配置前添加库搜索路径声明即可,修改后的完整CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.20) project(opencv_projects) set(CMAKE_CXX_STANDARD 14) find_package(PkgConfig REQUIRED) pkg_check_modules(OPENCV4 REQUIRED opencv4) add_executable(opencv_projects main.cpp) # 新增此行,传递OpenCV库的搜索路径 target_link_directories(opencv_projects PUBLIC ${OPENCV4_LIBRARY_DIRS}) target_link_libraries(opencv_projects ${OPENCV4_LIBRARIES}) target_include_directories(opencv_projects PUBLIC ${OPENCV4_INCLUDE_DIRS}) target_compile_options(opencv_projects PUBLIC ${OPENCV4_CFLAGS_OTHER})
方案2:使用带全路径的链接变量
pkg_check_modules生成的${OPENCV4_LINK_LIBRARIES}变量已经包含所有OpenCV库的全路径,不需要额外配置搜索路径,直接替换链接参数即可:
# 将原来的${OPENCV4_LIBRARIES}替换为${OPENCV4_LINK_LIBRARIES} target_link_libraries(opencv_projects ${OPENCV4_LINK_LIBRARIES})
方案3:使用OpenCV原生CMake配置(更推荐)
OpenCV官方提供了原生CMake配置文件,兼容性优于pkg-config调用,直接替换原有pkg-config相关配置即可:
cmake_minimum_required(VERSION 3.20) project(opencv_projects) set(CMAKE_CXX_STANDARD 14) # 直接使用原生find_package查找OpenCV,替换原有pkg-config代码 find_package(OpenCV REQUIRED) add_executable(opencv_projects main.cpp) target_link_libraries(opencv_projects ${OpenCV_LIBS}) target_include_directories(opencv_projects PUBLIC ${OpenCV_INCLUDE_DIRS})
如果CMake无法定位到OpenCV安装路径,可在CMake配置参数中添加前缀路径:
- Intel芯片Mac:
-DCMAKE_PREFIX_PATH=/usr/local/opt/opencv - Apple Silicon芯片Mac:
-DCMAKE_PREFIX_PATH=/opt/homebrew/opt/opencv
内容的提问来源于stack exchange,提问作者Dirk
相关产品推荐
相关产品推荐

