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

本地编译安装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库函数未声明
    出现这个问题的核心原因是:
  1. 配置的头文件搜索路径不完整,本地安装的兼容版gdk-pixbuf头文件没有被优先检索到
  2. 编译时优先读取了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 08:30:47