如何修复"Pacman:在加载共享库时出错"错误在Arch Linux中错误
在过去的几天里,我一直在广泛地测试我的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 /目录。
当然,可能有很多方法可以解决这种问题。
但我发现这更容易和更快。