gdk_pixbuf_save失败问题

⌚Time: 2025-12-20 22:23:00

👨‍💻Author: Jack Ge

我发现gtk应用部署到新系统,储存图片无法完成,只储存了1个空的图片文件没有内容。

发现是gdk_pixbuf_save这个函数失败了,添加错误检查代码

GError *error = NULL;
bool suc = gdk_pixbuf_save(pixbuf, saveFileName, "jpeg", &error, "quality", "100",  NULL);
if(!suc){
    if(error){
        g_printerr("save fail %s\n", error->message);
        g_error_free(error);
    }
}

查看错误输出显示

save fail Unable to load image-loading module: D:/xxx/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-jpeg.dll: The specified module could not be found.

缺失了一些文件。需要从gtk库对应的目录导入,也就是这个东西lib/gtk-2.0/2.10.0/loaders/libpixbufloader-jpeg.dll

另外的控制台还输出缺少别的一些文件,比如etc目录下的

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

gtk程序部署不仅仅dll库文件拷贝,还有一些别的模块也需要拷贝。主要是etc和lib这2个文件夹


当我拷贝lib/gtk-2.0/2.10.0/loaders/到应用同级目录的时候,依旧提示The specified module could not be found.,但是dll文件明明存在。

我问了AI,根据AI提示,还有可能就是libpixbufloader-jpeg.dll这个dll依赖的其它dll没有被加载。

我最后确定了是一个jpeg62.dll这个dll需要拷贝。把这个dll拷贝到应用同级目录就成功了。


总结,部署gtk应用到其它主机,需要拷贝一些库文件,还需要拷贝模块文件。如果功能失效需要检查错误输出,大概率是模块文件没有加载成功