You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译OTPClient时出现zbar_fourcc函数隐式声明错误求助

手动编译OTPClient时zbar_fourcc隐式声明错误的解决方案

错误信息

编译执行mkdir build; cmake ..后出现如下错误:

[ 25%] Building C object CMakeFiles/OTPClient.dir/src/parse-data.c.o
[ 27%] Building C object CMakeFiles/OTPClient.dir/src/parse-uri.c.o
[ 29%] Building C object CMakeFiles/OTPClient.dir/src/password-cb.c.o
[ 30%] Building C object CMakeFiles/OTPClient.dir/src/qrcode-parser.c.o
/tmp/SBo/OTPClient-master/src/qrcode-parser.c: In function ‘parse_qrcode’:
/tmp/SBo/OTPClient-master/src/qrcode-parser.c:36:35: error: implicit declaration of function ‘zbar_fourcc’ [-Werror=implicit-function-declaration]
   36 |     zbar_image_set_format (image, zbar_fourcc ('Y','8','0','0'));
      |                                   ^~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [CMakeFiles/OTPClient.dir/build.make:328: CMakeFiles/OTPClient.dir/src/qrcode-parser.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:85: CMakeFiles/OTPClient.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

已完成的检查

  • zbar.h 位于/usr/lib64,其zbar子目录也存在
  • 该头文件包含zbar_fourcc函数定义
  • 执行pkg-config --cflags --libs zbar返回-lzbar
  • zbar版本为0.23.90
  • cmake版本为3.25.1
  • gcc (GCC)版本为12.2.0
  • 使用Slackware64 15.0系统
  • 编译失败的src/qrcode-parser.c中包含#include <zbar.h>语句

编译命令分析

开启VERBOSE=1后得到的编译命令中,确实缺少指向zbar头文件所在路径的-I/usr/lib64参数,导致编译器无法找到zbar.h中的函数声明。编译命令如下:

/usr/bin/cc 
   -DGETTEXT_PACKAGE="OTPClient" 
   -I/usr/local/src/internet/opt/OTPClient-master/build 
   -I/usr/include/gtk-3.0 
   -I/usr/include/at-spi2-atk/2.0 
   -I/usr/include/at-spi-2.0 
   -I/usr/include/dbus-1.0 
   -I/usr/lib64/dbus-1.0/include 
   -I/usr/include/gio-unix-2.0 
   -I/usr/include/cairo 
   -I/usr/include/pango-1.0 
   -I/usr/include/harfbuzz 
   -I/usr/include/fribidi 
   -I/usr/include/atk-1.0 
   -I/usr/include/pixman-1 
   -I/usr/include/libxml2 
   -I/usr/include/freetype2 
   -I/usr/include/gdk-pixbuf-2.0 
   -I/usr/include/libpng16 
   -I/usr/include/libmount 
   -I/usr/include/blkid 
   -I/usr/include/glib-2.0 
   -I/usr/lib64/glib-2.0/include 
   -I/usr/include/uuid 
   -I/usr/include/libsecret-1 
   -Wall 
   -Wextra -O2 -Wformat=2 -Wmissing-format-attribute -fstack-protector-strong -Wundef 
   -Wmissing-format-attribute -fdiagnostics-color=always -Wstrict-prototypes -Wunreachable-code 
   -Wchar-subscripts -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align 
   -Werror=format-security -Werror=implicit-function-declaration -Wno-sign-compare 
   -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -pie -fPIE -DBUILD_GUI -DBUILD_CLI -std=gnu11 
   -MD -MT CMakeFiles/OTPClient.dir/src/qrcode-parser.c.o -MF 
   CMakeFiles/OTPClient.dir/src/qrcode-parser.c.o.d -o CMakeFiles/OTPClient.dir/src/qrcode-parser.c.o 
   -c /usr/local/src/internet/opt/OTPClient-master/src/qrcode-parser.c

解决方案

方案1:修改项目CMakeLists.txt(推荐)

  1. 打开OTPClient项目根目录下的CMakeLists.txt文件
  2. 确保文件中包含对zbar的pkg-config引用:
    find_package(PkgConfig REQUIRED)
    pkg_check_modules(ZBAR REQUIRED zbar)
    
  3. 找到创建OTPClient可执行目标的代码段(通常是add_executable(OTPClient ...)),添加以下两行,将zbar的头文件路径和库链接到目标:
    target_include_directories(OTPClient PRIVATE ${ZBAR_INCLUDE_DIRS})
    target_link_libraries(OTPClient PRIVATE ${ZBAR_LIBRARIES})
    
  4. 重新执行编译流程:
    cd build
    rm -rf *
    cmake ..
    make
    

方案2:cmake时手动指定参数

如果不想修改CMakeLists.txt,可以在执行cmake时直接传入zbar的头文件路径和库参数:

cd build
rm -rf *
cmake .. -DCMAKE_C_FLAGS="-I/usr/lib64" -DZBAR_LIBRARIES="-lzbar"
make

内容的提问来源于stack exchange,提问作者jcoppens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:07:13