如何修复 Arch Linux 中的“pacman:加载共享库时出错”错误

在过去的几天里,我一直在广泛地测试 画中画Pipenv 我的 Arch Linux 系统中的工具。 在测试这些工具时,我不得不多次重新安装和降级 Python2.x、Python 3.x 包和一些其他 Python 依赖包。 在某些时候,它破坏了我的 Arch Linux 并且 pacman 停止了工作。 每当我运行 pacman 时,我都会收到一条错误消息 “pacman:加载共享库时出错:libidn2.so.0:无法打开共享对象文件:没有这样的文件或目录”.

pacman:加载共享库时出错:libidn2.so.0:无法打开共享对象文件:没有这样的文件或目录

不只是pacman,其他一些应用程序,如pacaur、yaourt、packer、virtualbox和transmission等,也停止了工作。 当我尝试打开这些应用程序中的任何一个时,我不断收到此消息 – “加载共享库时出错:libidn2.so.0:无法打开共享对象文件”。 我可能卸载了一些我不记得的东西。 不幸的是,这是我的个人系统,我不想重新安装它,因为它有很多应用程序。 因此,重新安装操作系统和所有应用程序可能需要两天甚至更多天。 在像疯子一样在 Arch Linux wiki 和其他 Linux 论坛上大力搜索后,我终于设法修复了它。 如果您遇到类似的问题,别无所求,只需下载源文件并将丢失的文件复制到 /usr/lib/ 文件夹。 据我在网上搜索,到目前为止,这种方法似乎是最简单的一种。 请继续阅读以了解我如何修复此错误。

修复 Arch Linux 中的“pacman: error while loading shared libraries”错误

正如我已经说过的,我一直收到这个错误 – “pacman:加载共享库时出错:libidn2.so.0:无法打开共享对象文件:没有这样的文件或目录” 当我运行 pacman 命令或任何 AUR 助手(如 pacaur、packer、yaourt)时,我什至无法打开 VirtualBox 应用程序和传输客户端。 所以,这里的实际问题是文件 “libidn2.so.0” 失踪了。 我们需要找出来!

$ ls -la /usr/lib/libidn*

我的 Arch Linux 系统的示例输出:

lrwxrwxrwx 1 root root 22 Jul 22 2013 /usr/lib/libidnkitlite.so -> libidnkitlite.so.1.0.2 lrwxrwxrwx 1 root root 22 Jul 22 2013 /usr/lib/libidnkitlite.so.1 -> libidnkitlite.so.1.0.2 -rw-r--r-- 1 root root 276352 Jul 22 2013 /usr/lib/libidnkitlite.so.1.0.2 lrwxrwxrwx 1 root root 18 Jul 22 2013 /usr/lib/libidnkit.so -> libidnkit.so.1.0.2 lrwxrwxrwx 1 root root 18 Jul 22 2013 /usr/lib/libidnkit.so.1 -> libidnkit.so.1.0.2 -rw-r--r-- 1 root root 282368 Jul 22 2013 /usr/lib/libidnkit.so.1.0.2 lrwxrwxrwx 1 root root 17 Aug 15 19:00 /usr/lib/libidn.so -> libidn.so.11.6.16 lrwxrwxrwx 1 root root 17 Aug 15 19:00 /usr/lib/libidn.so.11 -> libidn.so.11.6.16 -rwxr-xr-x 1 root root 210872 Aug 15 19:00 /usr/lib/libidn.so.11.6.16

我有“libidn.so”,但找不到“libidn2.so.0”。 由于 pacman 和任何其他包管理器都不起作用,因此无法从官方存储库或本地缓存中安装、升级或降级任何包。 所以,我认为唯一的方法可能是从 Internet 下载包含丢失文件的包,解压缩,最后将丢失的文件复制到 /usr/lib/ 目录。 让我创建一个目录来保存 libdin2 tar 文件:

$ mkdir libidn
$ cd libidn

查找并下载此软件包的最新版本。 一个快速的谷歌搜索给我带来了 这里. 提取文件:

$ tar xf libidn2-2.0.4-2-x86_64.pkg.tar.xz

上述命令将文件的内容提取到名为“usr”的目录中。 转到 usr/lib 文件夹:(笔记 – 它是 usr/lib, 不是 /usr/lib)

$ cd usr/lib

最后复制丢失的文件,在我们的例子中是 libidn2.so.0, 到 Arch Linux 系统的 /usr/lib/ 目录。

$ sudo cp libidn2.so.0 /usr/lib/

然后,我跑了:

$ sudo pacman -syu