解决Archlinux上Navicat15因glib2不兼容报错问题
当前版本2022年8月2日
Archlinux系统软件包支持原版navicat15运行,不需要额外打补丁。
当前navicat已经更新到16了,由于没有正版许可证Linux版注册机,因此一直停留在老版本15。由此引发的软件包不兼容问题越来越多。
习惯性地更新了Archlinux所有软件包,发现Navicat无法运行了。命令行运行报错如下:
symbol lookup error: /usr/lib/libgio-2.0.so.0: undefined symbol: g_module_open_full
网上查到libgio-2.0.so.0
是glib2
包的文件,显然是版本不兼容了。考虑到AppImage本质上就是把各依赖库打包起来做成了便携应用,便考虑把老版本的glib2
打包进应用镜像,结果完美解决。
把glib2 2.68.4打包到应用镜像里
这是我在Archlinux论坛的回复,懒得翻译了,内容如下。
Solution: Patch glib2 version 2.68.4 into appimage
Steps:
-
Extract appimage file. All files will be in a directory called
squashfs-root
your-path/navicat15-premium-en.AppImage --appimage-extract
Tips: When extracting ends in error as follow, you can try to mount appimage file then copy app source to directory squashfs-root.
./navicat15-premium-en.AppImage --appimage-extract
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 471, resource id: 12928710, major code: 40 (TranslateCoords), minor code: 0
/tmp/.mount_whnQrp/AppRun: symbol lookup error: /usr/lib/libgio-2.0.so.0: undefined symbol: g_module_open_full# create app source mount point mkdir src # mount appimage file(read only) sudo mount -o loop your-path/navicat15-premium-en.AppImage src # copy all source file(writable) cp -r src squashfs-root # umount appimage file sudo umount src rmdir src
-
Find your
glib2-2.68.4-1-x86_64.pkg.tar.zst
package file.
If you are lucky enough, there will be one in path/var/cache/pacman/pkg/glib2-2.68.4-1-x86_64.pkg.tar.zst
. Or download it from package repository. Or anywhere.https://archive.archlinux.org/packages/g/glib2/glib2-2.68.4-1-x86_64.pkg.tar.zst
-
Extract
glib2-2.68.4-1-x86_64.pkg.tar.zst
tosquashfs-root
tar xvf glib2-2.68.4-1-x86_64.pkg.tar.zst -C squashfs-root
-
Repack squashfs-root into appimage file
appimagetool squashfs-root navicat15-premium-en-patched.AppImage
-
no more steps, just run it
把libffi 3.3打包到应用镜像里
最近发现Navicat跟libffi也出现了版本兼容的问题,运行错误如下:
error while loading shared libraries: libffi.so.7: cannot open shared object file: No such file or directory
查询发现,近期3.4.2-4
版本的libffi
去除了包中的libffi.so.7
文件,取而代之的是libffi.so.8
。看来找到旧版本的libffi
打包进去即可,或者安装aur的包libffi7退回旧版本(不知道会不会出现其他兼容性问题)。
分析了libffi7后,发现libffi.so.7
是libffi
包3.3
版本中的文件。那么可以把libffi-3.3-4-x86_64.pkg.tar.zst
打包进应用镜像就好了。具体过程同glib2
。
https://archive.archlinux.org/packages/l/libffi/libffi-3.3-4-x86_64.pkg.tar.zst
奇怪的是,原应用镜像里自带了libffi6
,不知道为何不能使用。
glibc不兼容问题
提示找不到共享库libcrypt.so.1
文件。这是glibc
里的文件,2.35-2
版本移除了该文件。可以参考以上步骤,将glibc-2.35-1-x86_64.pkg.tar.zst
打包到应用镜像里。
https://archive.archlinux.org/packages/g/glibc/glibc-2.35-1-x86_64.pkg.tar.zst
提示找不到libc.so.6
的GLIBC_2.36
版本。解决办法,退回原始官方AppImage版本。
squashfuse不兼容问题
最近squashfuse
从0.2.0
版本升级到0.3.0
,导致appimage无法运行,Segmentationfault (core dumped)
异常。bug尚未修复,系统软件包退回升级至0.2.0
版本即可。0.3.0-2
即可。
pacman -U https://archive.archlinux.org/packages/s/squashfuse/squashfuse-0.2.0-1-x86_64.pkg.tar.zst
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战