Arch:无法使用 pacman:加载共享库时出错

Arch:无法使用 pacman:加载共享库时出错

我刚刚安装完 Arch 并设置了无线连接。我想安装额外的软件包,所以我尝试使用 pacman。

但对于我使用的每个命令,我都会收到以下错误:

pacman:加载共享库时出错:libcurl.so.4:无法打开共享对象文件:没有这样的文件或库。

但在 /usr/local/lib 中我有以下文件/文件夹:

libcurl.a libcurl.a libcurl.so libcurl.so.4 libcurl.so.4.2.o pkgconfig

那么如何将 pacman 指向这些文件呢?

答案1

我不确定为什么你的libcurl.*文件在 中/usr/local/lib,但我的文件在/usr/lib它们应该在的位置。要确认ldconfig没有找到它们,请使用

ldconfig -p | grep curl

它不应该打印任何内容,如果打印了,请检查版本号,您可能获得了错误的版本。

要纠正这个问题,您需要告诉ldconfig在哪里可以找到这些库。您可以/usr/lib在 中添加指向相应文件的符号链接/usr/local/lib,也可以ldconfig直接在其中搜索:

echo /usr/local/lib | sudo tee -a /etc/ld.so.conf.d/local.conf

然后运行sudo ldconfig更新缓存。

也许尝试找出为什么你的库位于错误的目录中。

答案2

您需要找出它在哪里寻找libcurl(以及没有找到),因为它显然没有检查/usr/local/lib.首先,我建议对其运行 ldd 以查看是否缺少任何其他库:

ldd $(which pacman)

我希望您已经strace安装了,因为这将是您的下一个查找libcurl文件位置的工具。

strace  -e open -o strace.log $(which pacman)

运行此命令后,less strace.log查看它尝试打开哪些文件,这将帮助您确定它在哪里寻找它。一个快速而肮脏的修复方法是将适当的文件从/usr/local/lib它正在寻找的位置复制(或符号链接)。

这是我 strace 时得到的结果wget

open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libidn.so.11", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/etc/wgetrc", O_RDONLY)           = 3
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
open("/usr/share/locale/\"en_US/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/\"en/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/\"en_US/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/\"en/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en\"/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en\"/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)

相关内容