Arch:パックマンが利用できません:共有ライブラリの読み込み中にエラーが発生しました。

Arch:パックマンが利用できません:共有ライブラリの読み込み中にエラーが発生しました。

ちょうどArchをインストールし、ワイヤレス接続を確立しました。追加パッケージをインストールしたいので、pacmanを使ってみました。

しかし、私が使用するすべてのコマンドに対して次のエラーが発生します。

pacman:共有ライブラリのロード中にエラーが発生しました。 libcurl.so.4:共有オブジェクトファイルを開くことができません。そのファイルやライブラリはありません。

ただし、/usr/local/libには次のファイル/フォルダがあります。

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

それでは、パックマンにこのファイルをどのように割り当てますか?

答え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)

関連情報