pykend
pykend
发布于 2个月前

解决manjaro更新后"pacman: error while loading shared libraries"

前言

用了manjaro两个多月,一直很稳定,一大早看到了168个包要更新,想也没想就点了yes,结果就遇到了传说中的滚挂,由于头一次遇到这种问题,花了一天的时间才解决,中间也走了不少弯路,一定要记录一下这次难得的经历。

解决:pacman: error while loading shared libraries: libidn2.so.4: cannot open shared object file: No such file or directory

这个错误的意思是:libidn2.so.4这个共享文件缺失。

解决思路

所以最简单的解决方法就是:

  1. 缺失的这个文件原来在哪个目录下?
  2. 去哪找找到这个缺失的文件?

一、

先解决第一个问题,我用的方法比较暴力,tty下在根目录用find查询libidn2

sudo -i             // 进入root模式
cd /                // 进根目录
find -name libidn2*   // 查询以libidn2为开头的文件或目录

在众多的搜索结果里,我锁定了这个目录:/usr/lib/

cd 到这个目录后发现果然没有libidn2.so.4这个文件

二、

在网上搜索“libidn2”,找到官网后下载最新版本的安装包,根据自己的系统版本选择相应文件进行下载->传送门

我下载的是.gz格式的,由于我是在别的系统下载包到U盘然后拷到这个系统的,所以还需要一些操作U盘的指令。

1. 未插入u盘前,检查自己的硬盘分区情况

fdisk -l 

2. 插入以后,再执行上述命令,会发现多了一个设备,记住这个/dev/sdb1

3. 在/mnt下新建usb目录作为u盘的挂载点

mkdir /mnt/usb

4. 然后将/dev/sdb1 挂载到/mnt/usb目录下

mount /dev/sdb1 /mnt/usb/

5. cd到/mnt/usb下就能看到u盘里的文件了

cd mnt/usb/

三、

1. 将u盘里预先下载好的压缩包解压缩

tar -xf libidn2-latest.tar.gz

2. 进入u盘里的/usr/lib,注意,不是根目录下的那个

cd /usr/lib

3. 拷贝缺失的文件到/usr/lib

cp libidn2.so.4 /usr/lib/

4. 重新运行pacman进行中更新,此步需要联网进行

pacman -S libidn2 --force
pacman -Syu

附:我的libidn文件github地址
参考博客

总结

  1. 这次修复系统的体验还是很难得的,学到了很多命令,也感谢臧琛与李宜衡的无私帮助。
  2. 更新系统前一定要去官网看看log,无脑点yes,滚挂是早晚的事,这次更新我也是在官网的论坛上发现有不少人遇到了同样的问题,才在评论区找到了解决办法->传送门