如何修复"Pacman:在加载共享库时出错"错误在Arch Linux中错误

时间:2020-03-21 11:48:52  来源:igfitidea点击:

在过去的几天里,我一直在广泛地测试我的Arch Linux系统中的PIP和Pipenv工具。

在测试这些工具时,我必须重新安装和降级Python2.x,Python 3.x包和一些其他Python依赖关系包多次。
在某些时候,它打破了我的Arch Linux和Pacman停止工作。
每当我运行Pacman时,我都会出现一个错误,说"pacman:加载共享库时出错:libidn2.so.0:无法打开共享对象文件:没有这样的文件或者目录"。

不仅仅是Pacman,其他一些应用程序,例如Pauraur,Yaourt,Packer,VirtualBox和传输等也停止了工作。
当我尝试打开这些应用程序中的任何一个时,我一直在加载这条消息时"加载共享库时出错:libidn2.so.0:无法打开共享对象文件"。
我可能已经卸载了我所记不起的东西。

为了我的运气不好,这是我的个人系统,我不想重新安装它,因为它有很多应用程序。
因此,重新安装操作系统和所有应用可能需要两个或者可能更多的日子。
在大力搜索Arch Linux Wiki和其他Linux论坛之后,就像一个疯狂的man ,我终于设法修好了它。
如果我们遇到了这样的问题,请看起来无处,只是下载源文件并将缺失的文件复制到/usr/lib /文件夹。
就我在网上搜索而言,到目前为止,这种方法似乎非常简单。
阅读以了解如何修复此错误。

修复"Pacman:在加载共享库时出错"错误在Arch Linux中错误

正如我所说的那样,我一直遇到这个错误"Pacman:加载共享库时出错:libidn2.so.0:无法打开共享对象文件:没有这样的文件或者目录"当我运行pacman命令或者任何aur借助者(如paver)) Packer,Yaourt和我甚至无法打开VirtualBox应用程序和传输客户端。

所以,这里的实际问题是文件"libidn2.so.0"已经丢失了。
我们需要找到它!

$ls -la /usr/lib/libidn*

来自My Arch Linux系统的示例输出:

lrwxrwxrwx 1 root root 22 May 22 2013 /usr/lib/libidnkitlite.so -> libidnkitlite.so.1.0.2
lrwxrwxrwx 1 root root 22 May 22 2013 /usr/lib/libidnkitlite.so.1 -> libidnkitlite.so.1.0.2
-rw-r--r-- 1 root root 276352 May 22 2013 /usr/lib/libidnkitlite.so.1.0.2
lrwxrwxrwx 1 root root 18 May 22 2013 /usr/lib/libidnkit.so -> libidnkit.so.1.0.2
lrwxrwxrwx 1 root root 18 May 22 2013 /usr/lib/libidnkit.so.1 -> libidnkit.so.1.0.2
-rw-r--r-- 1 root root 282368 May 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,not/usr/lib)

$cd usr/lib

最后复制缺失文件,在我们的情况下它是arch Linux系统的libidn2.so.0,到/usr/lib /目录。

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

然后,我运行了:

$sudo pacman -syu

瞧! Pacman现在工作!

哎呀!哦,不,等..这不起作用。
几分钟后我收到了这个错误。

[....]
(511/511) checking keys in keyring [########] 100%
(511/511) checking package integrity [########] 100%
(511/511) loading package files [########] 100%
(511/511) checking for file conflicts [########] 100%
error: failed to commit transaction (conflicting files)
libidn2: /usr/lib/libidn2.so.0 exists in filesystem
Errors occurred, no packages were upgraded.

要解决这个问题,我运行了:

$sudo pacman -S libidn2 --force

然后,我再次尝试了更新:

$sudo pacman -Syu

所以,如果你们曾经遇到过一些像"加载共享库时出错的问题" ,下载该软件包的最新版本,提取它并将丢失的文件复制到/usr/lib /目录。
当然,可能有很多方法可以解决这种问题。
但我发现这更容易和更快。