ubuntu编译zxing-cpp踩坑

安装Qt

如果是系统没装Qt,就按照Qt5安装这个链接里面的内容安装,期间可能会遇到运行下面的命令

sudo apt-get install qt5*

时,报错can not locate qt*,然后根据这个链接的内容,在.zshrc.bashrc文件中加入下面一行

setopt no_nomatch

source ~/.zshrcsource ~/.bashrc一下,再安装qt5*就能成功

安装了Qt但报错找不到Qt

按照以上步骤安装了Qt但仍报错找不到的

INFO: Qt (Gui/Multimedia/Quick) not found, skipping Qt examples
-- Configuring done
CMake Warning (dev) in example/CMakeLists.txt:
  AUTOGEN: No valid Qt version found for target ZXingOpenCV.  AUTOMOC and
  AUTORCC disabled.  Consider adding:

    find_package(Qt<QTVERSION> COMPONENTS Core)

  to your CMakeLists.txt file.
This warning is for project developers.  Use -Wno-dev to suppress it.

按照里面的提示,在zxing-cpp/CMakeLists.txt中加入find_package(Qt<QTVERSION> COMPONENTS Core)一行,其中的换成你的版本号,这里换成5

find_package(Qt5 COMPONENTS Core)

找不到stb

报错找不到stb这个package

-- Checking for module 'stb'
--   No package 'stb' found
-- Configuring done
-- Generating done

在各个CMakeLists.txt文件中搜索stb这个关键字,发现只有

zxing_add_package_stb()

这一行里面包含stb这个关键字,再找,发现是在zxing-cpp/zxing.cmake这个文件里面定义这条命令的。参考这个链接,发现zxing-cpp/zxing.cmake下面这一串东西是已经做了搜索添加stb包这个操作的,但最后却没生效,语句的作用看注释。

macro(zxing_add_package_stb)
    unset (STB_FOUND CACHE)
    
    if (BUILD_DEPENDENCIES STREQUAL "AUTO")
        find_package(PkgConfig)
        pkg_check_modules (STB IMPORTED_TARGET stb)  # 检测stb包是否存在
    elseif (BUILD_DEPENDENCIES STREQUAL "LOCAL")
        find_package(PkgConfig REQUIRED)
        pkg_check_modules (STB REQUIRED IMPORTED_TARGET stb)
    endif()

    if (NOT STB_FOUND)  # 如果stb包找不到
        include(FetchContent)
        FetchContent_Declare (stb
            GIT_REPOSITORY https://github.com/nothings/stb.git)  
            # 从github上下载stb这个包,下载到zxing-cpp.release/_deps这个文件夹里面
        FetchContent_MakeAvailable (stb)
        add_library(stb::stb INTERFACE IMPORTED) # 定义stb::stb
        target_include_directories(stb::stb INTERFACE ${stb_SOURCE_DIR}) # 头文件链接目录路径
    else()
        add_library(stb::stb ALIAS PkgConfig::STB)
    endif()
endmacro()

它已经从github上下载了stb这个包,下载到zxing-cpp.release/_deps这个文件夹里面。但还是链接不上,原因不明,有知道的大哥可以在评论区说一下。既然它通过这种cmake自动化下载并添加的方式无法解决stb依赖,那我们就手动添加依赖。

  1. 先从github上下载stb这个包
cd {你用来保存stb包的文件夹}
git clone https://github.com/nothings/stb.git
  1. 修改zxing-cpp/zxing.cmake文件的内容
    将它关于stb的操作都注释掉,自己去设置stb包的路径。因为stb只有.h文件,它的头文件里面已经包含了它的实现,因此只需要添加include_directories target_include_directories
macro(zxing_add_package_stb)
    unset (STB_FOUND CACHE)
    include_directories("{你用来保存stb包的文件夹}/stb")
    add_library(stb::stb INTERFACE IMPORTED)
    target_include_directories(stb::stb INTERFACE "{你用来保存stb包的文件夹}/stb")

    if (BUILD_DEPENDENCIES STREQUAL "AUTO")
        find_package(PkgConfig)
        # pkg_check_modules (STB IMPORTED_TARGET stb)
    elseif (BUILD_DEPENDENCIES STREQUAL "LOCAL")
        find_package(PkgConfig REQUIRED)
        # pkg_check_modules (STB REQUIRED IMPORTED_TARGET stb)
    endif()

    # if (NOT STB_FOUND)
    #     include(FetchContent)
    #     FetchContent_Declare (stb
    #         GIT_REPOSITORY https://github.com/nothings/stb.git)
    #     FetchContent_MakeAvailable (stb)
    #     add_library(stb::stb INTERFACE IMPORTED)
    #     target_include_directories(stb::stb INTERFACE ${stb_SOURCE_DIR})
    # else()
    #     add_library(stb::stb ALIAS PkgConfig::STB)
    # endif()
endmacro()

完成以上操作后就能编译zxing-cpp成功了

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值