本地编译安装GTK2.24.20报updateiconcache.o构建失败如何解决
无管理员权限下编译GTK 2.24.20(SLES12环境)报错解决
问题背景
参考无root权限本地编译软件的相关步骤,在SLES12系统上本地安装GTK 2.24.20,已下载对应版本源码压缩包,初始执行的环境配置命令如下:
setenv CPPFLAGS "-I/my/local/path/my_gtk/include" setenv LDFLAGS "-L/my/local/path/my_gtk/lib" setenv LD_LIBRARY_PATH "/my/local/path/my_gtk/lib" setenv PKG_CONFIG_PATH "/my/local/path/my_gtk/lib/pkgconfig" ./configure --prefix=/my/local/path/my_gtk
配置完成后执行make命令编译,触发报错,直接报错提示为recipe for target 'updateiconcache.o' failed,编译终止。
核心错误定位
从编译日志的前置报错可以定位根因,最终的make规则报错只是结果,实际编译阶段已经出现了大量类型未定义错误:
- 编译器无法识别
GdkPixdata、GdkPixbuf类型 gdk_pixdata_deserialize、gdk_pixbuf_new_from_file等gdk-pixbuf库函数未声明
出现这个问题的核心原因是:
- 配置的头文件搜索路径不完整,本地安装的兼容版gdk-pixbuf头文件没有被优先检索到
- 编译时优先读取了SLES12系统自带的高版本gdk-pixbuf头文件,该版本已经调整了头文件结构、移除了GTK 2.24.20依赖的旧版类型定义,导致兼容性错误
关键编译日志片段如下:
gtkiconcachevalidator.c: In function 'check_pixel_data': gtkiconcachevalidator.c:166:7: error: unknown type name 'GdkPixdata' GdkPixdata data; ^ gtkiconcachevalidator.c:168:7: warning: implicit declaration of function 'gdk_pixdata_deserialize' [-Wimplicit-function-declaration] check ("pixel data", gdk_pixdata_deserialize (&data, length, ^ updateiconcache.c: At top level: updateiconcache.c:168:3: error: unknown type name 'GdkPixdata' GdkPixdata pixdata; ^ updateiconcache.c: In function 'maybe_cache_image_data': updateiconcache.c:476:7: error: unknown type name 'GdkPixbuf' GdkPixbuf *pixbuf; ^ Makefile:2902: recipe for target 'updateiconcache.o' failed make[3]: *** [updateiconcache.o] Error 1
修复步骤
- 首先清理之前的编译缓存,避免旧配置文件干扰:
make distclean
- 修正环境变量,将本地安装路径的搜索优先级调到系统路径之前,补全所有依赖的头文件、库文件搜索路径(注意SLES 64位环境下部分依赖会安装到lib64目录,需要同步添加):
setenv CPPFLAGS "-I/my/local/path/my_gtk/include -I/my/local/path/my_gtk/include/gdk-pixbuf-2.0 -I/my/local/path/my_gtk/include/glib-2.0 -I/my/local/path/my_gtk/lib64/glib-2.0/include -I/my/local/path/my_gtk/include/pango-1.0 -I/my/local/path/my_gtk/include/atk-1.0 -I/my/local/path/my_gtk/include/cairo" setenv LDFLAGS "-L/my/local/path/my_gtk/lib -L/my/local/path/my_gtk/lib64" setenv LD_LIBRARY_PATH "/my/local/path/my_gtk/lib:/my/local/path/my_gtk/lib64:$LD_LIBRARY_PATH" setenv PKG_CONFIG_PATH "/my/local/path/my_gtk/lib/pkgconfig:/my/local/path/my_gtk/lib64/pkgconfig:$PKG_CONFIG_PATH"
- 重新执行配置,关闭不必要的文档编译减少依赖问题:
./configure --prefix=/my/local/path/my_gtk --disable-gtk-doc
配置完成后务必检查输出的依赖检查结果,确认gdk-pixbuf、glib、pango、atk等依赖都读取的是你本地
/my/local/path/my_gtk路径下的版本,而非系统路径下的高版本。
- 重新执行编译,可加-j参数利用多核加速:
make -j$(nproc)
编译无报错后执行make install即可完成本地安装。
内容的提问来源于stack exchange,提问作者vesii
相关产品推荐
相关产品推荐

