我发现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应用到其它主机,需要拷贝一些库文件,还需要拷贝模块文件。如果功能失效需要检查错误输出,大概率是模块文件没有加载成功