我剛剛安裝完 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)