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)

相關內容