gtk2.0程序打包后用到gdkpixbuf的地方失效

⌚Time: 2025-06-18 19:00:00

👨‍💻Author: Jack Ge

我将gtk2.0程序与运行库打包放在没有gtk运行时环境的机器运行,发现gtk程序背景图片没有了,绘制背景的地方用到的是GdkPixbuf来储存图像的,用到了gdkpixbuf库。

控制台打印提示

 GdkPixbuf-WARNING **: Cannot open pixbuf loader module file 'C:\xx\etc\gtk-2.0\gdk-pixbuf.loaders': No such file or directory

查找gtk库,确实有\etc\gtk-2.0\gdk-pixbuf.loaders文件,把他的目录结构拷贝到程序运行目录。运行之后发现还是不能显示图片,控制台没有提示

检查gdk-pixbuf.loaders文件。里面有加载的dll文件路径,指定了每种类型的文件调用的dll。

"c:/devel/target/5e32e6f9bd779a13110a7c6ff9016d6e/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-gif.dll"
"gif" 4 "gtk20" "The GIF image format" "LGPL"
"image/gif" ""
"gif" ""
"GIF8" "" 100

查找gtk库确实有/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-gif.dll这样的文件,直接把loaders文件夹按照目录结构拷贝到程序运行目录下,就显示正常图片了。

所以用到gdkpixbuf的gtk程序,在没有gtk运行时环境的情况下,还需要拷贝下面的内容到程度目录里面:

├─etc
│  └─gtk-2.0
│          gdk-pixbuf.loaders
│
└─lib
    └─gtk-2.0
        └─2.10.0
            └─loaders
                    libpixbufloader-ani.dll
                    libpixbufloader-bmp.dll
                    libpixbufloader-gif.dll
                    libpixbufloader-icns.dll
                    libpixbufloader-ico.dll
                    libpixbufloader-jpeg.dll
                    libpixbufloader-pcx.dll
                    libpixbufloader-png.dll
                    libpixbufloader-pnm.dll
                    libpixbufloader-ras.dll
                    libpixbufloader-tga.dll
                    libpixbufloader-tiff.dll
                    libpixbufloader-wbmp.dll
                    libpixbufloader-xbm.dll
                    libpixbufloader-xpm.dll