解决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。如果你有其他问题或更好的解决方案,欢迎在评论区分享!

参考链接

相关推荐
未济4 天前
linux 配置环境变量
linux
傲世仙尊4 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.4 天前
进程间通信
linux
AI职业加油站4 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
Liuqy-054 天前
Linux IO编程——静态库、动态库
linux
此冬歌咏4 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
彧azz4 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅4 天前
linux(8) 软硬链接
linux·运维·服务器
AIgorithmGEEK5 天前
[Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
linux·线程·pid