我刚刚安装完 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)