【问题标题】:C++ ZBar cmake error 'File not found' when including包含时 C++ ZBar cmake 错误“找不到文件”
【发布时间】:2019-11-19 15:23:52
【问题描述】:

当我在 C++ 脚本中包含 ZBar 时遇到问题。我已经尝试通过CMakelists.txt 添加它:

cmake_minimum_required(VERSION 2.8.12)
project( Barcode-cpp )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} ${ZBARCV_SOURCE_DIR} )
set(CMAKE_MODULE_PATH ${ZBARCV_SOURCE_DIRS})
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_LIBRARIES} zbar )

我在 Mac 上。我看了看,我的zbar.h 文件位于应该在的/usr/local/include/ 中。

我这样包含它:#include <zbar.h>

我希望有人能够帮助我。提前致谢!

编辑

完整的错误日志:

/Users/mathijs/Documents/Barcode-cpp/src/Barcodes.h:7:10: fatal error: 'zbar.h' file not found
#include <zbar.h>
         ^~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/src.dir/src/VideoVeed.cpp.o] Error 1
make[1]: *** [CMakeFiles/src.dir/all] Error 2
make: *** [all] Error 2

【问题讨论】:

  • 您能否在问题帖中提供完整 make 错误日志?另外,您似乎没有在任何地方定义您的ZBAR* 变量?这些是由 OpenCV 定义的吗?您可以通过在 CMake 文件中尝试 message("ZBARCV_SOURCE_DIR: ${ZBARCV_SOURCE_DIR}") 来测试...
  • @squareskittles 出错
  • @squareskittles 添加该消息时找不到 ZBAR 库
  • 作为@squareskittles,您不会在代码中的任何位置设置任何 ZBAR 变量。你希望 CMake 自动解决这个问题吗?

标签: c++ cmake zbar


【解决方案1】:

我刚刚检查过; ZBar 的 Brew 包包含一个 packageconfig 文件 (zbar.pc)

这意味着您可以使用现代 CMake 工具代替货物培养:

cmake_minimum_required(VERSION 3.8)
project( Barcode-cpp )
find_package( OpenCV REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS})
set(CMAKE_CXX_STANDARD 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})

find_package(PkgConfig REQUIRED)
pkg_check_modules(ZBar REQUIRED IMPORTED_TARGET zbar)

target_link_libraries(program PkgConfig::ZBar)

pkg_check_modules 将读取zbar.pc 文件并生成一个名为PkgConfig::ZBarIMPORTED 目标,该目标将自动为program 设置包含路径和链接器路径。

【讨论】:

  • 你可能知道为什么我不能在 src 内的 C++ 脚本中包含 zbar,但我可以在 main.cpp 中?
  • 只有program 目标链接到它。但您也可以使用target_link_libraries(src PkgConfig::ZBar) 链接src。我相信到 program 的链接甚至没有必要。
  • 谢谢,程序的链接确实不需要。
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 2019-09-08
  • 2013-03-05
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
相关资源
最近更新 更多