解决Navicat 17 Premium Lite在Linux上运行报错“LIBSYSTEMD_251‘ not found”问题

解决Navicat 17 Premium Lite在Linux上运行报错"LIBSYSTEMD_251' not found"问题

解决Navicat 17 Premium Lite在Linux上运行报错"LIBSYSTEMD_251' not found"问题

问题描述

在Linux系统上运行Navicat 17 Premium Lite的AppImage文件时,可能会遇到以下错误:

bash 复制代码
./navicat17-premium-lite-cs-x86_64.AppImage
/tmp/.mount_navicaefbMlO/AppRun: /tmp/.mount_navicaefbMlO/usr/lib/libsystemd.so.0: version `LIBSYSTEMD_251' not found (required by /usr/lib/libmount.so.1)

这个错误通常是因为AppImage内置的libsystemd库版本与系统所需的版本不兼容导致的。具体来说,AppImage内置了一个较旧版本的libsystemd库,而系统需要的是较新版本(LIBSYSTEMD_251)。

解决方案

方法一:解压AppImage并删除冲突库(推荐)

这是最直接的解决方案,通过解压AppImage文件,删除其中内置的libsystemd库,然后直接运行解压后的程序。

步骤1:解压AppImage文件

首先,确保你有执行权限,然后使用--appimage-extract参数解压AppImage文件:

bash 复制代码
# 给AppImage文件添加执行权限(如果还没有)
chmod +x ./navicat17-premium-lite-cs-x86_64.AppImage

# 解压AppImage文件
./navicat17-premium-lite-cs-x86_64.AppImage --appimage-extract

解压完成后,你会看到一个名为squashfs-root的目录,里面包含了AppImage的所有内容。

步骤2:删除冲突的libsystemd库

进入解压后的目录,删除所有libsystemd相关的库文件:

bash 复制代码
# 删除squashfs-root目录下的libsystemd库
rm -r squashfs-root/usr/lib/libsystemd*

注意:这个操作只会删除AppImage内置的libsystemd库,不会影响系统本身的库文件。

步骤3:运行程序

现在可以直接运行解压后的程序:

bash 复制代码
./squashfs-root/AppRun

程序应该能够正常启动,因为它会使用系统自带的libsystemd库,而不是内置的旧版本。

原理分析

为什么会出现这个错误?

  1. AppImage打包机制:AppImage将应用程序及其所有依赖库打包成一个可执行文件
  2. 库版本冲突:Navicat的AppImage内置了较旧版本的libsystemd库
  3. 系统要求:你的系统需要libsystemd 251或更高版本
  4. 动态链接优先级:AppImage运行时,系统会优先使用AppImage内置的库,而不是系统库

删除libsystemd*是否安全?

是的,删除AppImage内置的libsystemd库是安全的,因为:

  1. 系统有替代库:现代Linux系统都自带libsystemd库
  2. 动态链接回退:当内置库不存在时,程序会自动使用系统库
  3. 不影响其他程序:这只影响当前AppImage的运行,不影响系统其他程序

创建快捷方式(可选)

如果你希望像普通应用程序一样使用Navicat,可以创建一个桌面快捷方式:

1. 创建启动脚本

创建一个启动脚本start-navicat.sh

bash 复制代码
#!/bin/bash
cd /path/to/squashfs-root
./AppRun

给脚本添加执行权限:

bash 复制代码
chmod +x start-navicat.sh

2. 创建桌面入口文件

创建~/.local/share/applications/navicat.desktop

ini 复制代码
[Desktop Entry]
Name=Navicat 17 Premium Lite
Comment=Database Management Tool
Exec=/path/to/start-navicat.sh
Icon=/path/to/squashfs-root/navicat-icon.png
Terminal=false
Type=Application
Categories=Development;Database;

3. 更新桌面数据库

bash 复制代码
update-desktop-database ~/.local/share/applications

现在你可以在应用程序菜单中找到Navicat了。

常见问题解答

Q1:删除libsystemd*后程序还是无法启动?

A:尝试删除其他可能冲突的库:

bash 复制代码
rm -r squashfs-root/usr/lib/libmount*
rm -r squashfs-root/usr/lib/libblkid*

Q2:每次更新AppImage都需要重复这个操作吗?

A:是的,每次下载新的AppImage文件都需要重新解压和删除冲突库。建议保留squashfs-root目录,直接运行其中的AppRun

Q3:有没有更永久的解决方案?

A:你可以向Navicat官方反馈这个问题,请求他们更新AppImage中的库版本。或者考虑使用其他安装方式(如Flatpak、Snap等)。

Q4:这个方法适用于其他AppImage吗?

A:是的,这个方法适用于任何因为内置库版本冲突而无法运行的AppImage程序。

Q5:能否将修改后的 squashfs-root 重新打包成 AppImage?

A:可以,但需要额外的工具和步骤。常用的重新打包工具是 appimagetool。基本步骤如下:

  1. 安装 appimagetool

    bash 复制代码
    # 从 GitHub 下载
    wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
    chmod +x appimagetool-x86_64.AppImage
  2. 准备 AppRun 和 .desktop 文件 :确保 squashfs-root 目录下存在正确的 AppRun(可执行入口)和 .desktop(桌面入口)文件。对于 Navicat,解压后通常已包含。

  3. 重新打包

    bash 复制代码
    ./appimagetool-x86_64.AppImage squashfs-root

    这会在当前目录生成一个新的 .AppImage 文件(例如 Navicat-17-Premium-Lite-x86_64.AppImage)。

注意事项

  • 重新打包后的 AppImage 可能失去官方签名,某些安全设置严格的系统会警告。
  • 如果原 AppImage 使用了特殊封装或加密,重新打包可能失败。
  • 每次官方发布新版本,你都需要重新解压、删除冲突库、再打包,维护成本较高。

因此,对于 Navicat 这个特定问题,更推荐直接运行修改后的 squashfs-root/AppRun,或者创建快捷方式(见上文"创建快捷方式"章节)。重新打包主要适用于需要分发自定义版本或集成额外依赖的场景。

总结

通过解压Navicat 17 Premium Lite的AppImage文件并删除其中冲突的libsystemd库,我们可以解决"LIBSYSTEMD_251' not found"错误。这种方法:

  1. 安全可靠:不影响系统其他程序
  2. 简单直接:只需要几个命令
  3. 立即生效:删除后即可正常运行
  4. 可逆:如果不满意,可以重新下载原始AppImage文件

希望这个解决方案能帮助你顺利运行Navicat 17 Premium Lite。如果你有其他问题或更好的解决方案,欢迎在评论区分享!

参考链接

相关推荐
Doraemomo2 小时前
Linux编程-标准IO和系统IO
linux·运维·服务器
骇客野人2 小时前
Linux 查看 Java 进程常用命令
java·linux·运维
睡一觉就好了。2 小时前
Linux 信号机制
linux·运维·网络
正点原子2 小时前
【正点原子Linux连载】 第十章 pinctrl和gpio子系统实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南
linux·运维·驱动开发
气泡水。3 小时前
RHCSA笔记实记
linux·笔记
波特率1152003 小时前
linux当中的六大进程间通信方式
linux·嵌入式·ipc
冠希陈、3 小时前
Nginx部署SSL,导致多站点串站问题
运维·nginx·ssl
RisunJan3 小时前
Linux命令-ssh-keyscan(从主机收集公钥)
linux·ssh
こ进制掌控者3 小时前
局域网电脑SMB访问NAS,提示用户名或密码不正确。
运维·服务器