编译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.90cmake版本为3.25.1gcc (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(推荐)
- 打开OTPClient项目根目录下的
CMakeLists.txt文件 - 确保文件中包含对zbar的pkg-config引用:
find_package(PkgConfig REQUIRED) pkg_check_modules(ZBAR REQUIRED zbar) - 找到创建OTPClient可执行目标的代码段(通常是
add_executable(OTPClient ...)),添加以下两行,将zbar的头文件路径和库链接到目标:target_include_directories(OTPClient PRIVATE ${ZBAR_INCLUDE_DIRS}) target_link_libraries(OTPClient PRIVATE ${ZBAR_LIBRARIES}) - 重新执行编译流程:
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
相关产品推荐
相关产品推荐

