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)

関連情報