Mac环境下C++引入ZBar报'zbar.h文件未找到'的CMake问题
解决Mac下CMake引入ZBar时找不到zbar.h的问题
从你的错误日志和CMakeLists.txt来看,核心问题是CMake没有正确添加ZBar的头文件搜索路径,也没有正确识别ZBar的库依赖。下面是具体的分析和修复方案:
问题分析
- 你的CMake配置里没有正确查找ZBar依赖:直接使用了
${ZBAR_LIBRARIES}变量,但没有通过find_package或pkg-config定义它,导致这个变量是空值。 include_directories中没有明确加入ZBar头文件所在的/usr/local/include路径——虽然Mac系统编译器默认可能会搜索这个目录,但CMake的默认包含路径有时候会遗漏(尤其是通过Homebrew安装的第三方库)。- 你设置了
CMAKE_MODULE_PATH ${ZBARCV_SOURCE_DIRS},但ZBARCV_SOURCE_DIRS是未定义的变量,这行配置完全无效,还可能干扰CMake的模块查找逻辑。
修复方案
方案一:用pkg-config自动识别ZBar(推荐)
如果你是通过Homebrew安装的ZBar(执行过brew install zbar),可以借助pkg-config让CMake自动获取ZBar的头文件和库路径:
修改后的完整CMakeLists.txt如下:
cmake_minimum_required(VERSION 2.8.12) project(Barcode-cpp) # 查找OpenCV依赖 find_package(OpenCV REQUIRED) # 启用pkg-config工具,用于查找ZBar find_package(PkgConfig REQUIRED) pkg_check_modules(ZBAR REQUIRED zbar) # 添加头文件搜索路径:包含OpenCV、ZBar以及你的项目源码目录 include_directories( ${OpenCV_INCLUDE_DIRS} ${ZBAR_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/src ) add_compile_options(-std=c++11) # 编译静态库src add_library(src src/VideoVeed.h src/VideoVeed.cpp src/Crop.h src/Crop.cpp src/Barcodes.h src/Barcodes.cpp ) # 编译主程序 add_executable(program program/main.cpp) # 链接所有依赖库 target_link_libraries(program src ${OpenCV_LIBS} ${ZBAR_LIBRARIES} )
方案二:手动指定ZBar路径(当pkg-config失效时)
如果你确认ZBar的头文件在/usr/local/include,库文件在/usr/local/lib/libzbar.dylib,可以直接手动指定路径:
cmake_minimum_required(VERSION 2.8.12) project(Barcode-cpp) find_package(OpenCV REQUIRED) # 手动指定ZBar的头文件目录和库文件路径 set(ZBAR_INCLUDE_DIR /usr/local/include) set(ZBAR_LIBRARY /usr/local/lib/libzbar.dylib) include_directories( ${OpenCV_INCLUDE_DIRS} ${ZBAR_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/src ) add_compile_options(-std=c++11) add_library(src src/VideoVeed.h src/VideoVeed.cpp src/Crop.h src/Crop.cpp src/Barcodes.h src/Barcodes.cpp ) add_executable(program program/main.cpp) target_link_libraries(program src ${OpenCV_LIBS} ${ZBAR_LIBRARY} )
编译前的必要操作
修改完CMakeLists.txt后,记得清理之前的CMake缓存,避免旧配置干扰新编译:
# 回到项目根目录 rm -rf CMakeCache.txt CMakeFiles/ # 创建新的build目录并执行编译流程 mkdir -p build && cd build cmake .. make
内容的提问来源于stack exchange,提问作者mHvNG
相关产品推荐
相关产品推荐

