実行中:
Sudo /sbin/ldconfig
次のエラーが表示されます。
/sbin/ldconfig: /usr/local/lib/ is not a symbolic link
ファイルを実行すると:
file /usr/local/lib/
/usr/local/lib/: directory
/usr/local/lib/
の中には、私が使用する3つのライブラリがあります。ここでは、lib1
、lib2
、およびlib3
と呼びます。
さて、バイナリでldd
を実行すると、結果は次のようになります。
lib1.so => not found
lib2.so => not found
lib3.so => /usr/local/lib/lib3.so (0x00216000)
ただし、すべては/usr/local/lib/{lib1,lib2,lib3}.so
と同じフォルダーにあります。
ldconfig
を実行するたびに、同じエラーが表示されます。
/usr/local/lib/ is not a symbolic link
/usr/local/lib
は/etc/ld.conf.d/*.conf
で2回宣言されるべきだと思ったが、そうではない:
Sudo egrep '\/usr\/local' /etc/ld.so.conf.d/*
projectA.conf.old:/usr/local/projectA/lib
local.conf:/usr/local/lib
ld.so.conf
には/etc/ld.so.conf.d/*.conf
のみが含まれるため、この*.old
は処理されず、/usr/local/projectA/lib
を参照します。
しばらくして、すべてのlib1とlib2を削除しました(ある時点で、バイナリのフォルダーでテストしました)。同じエラーが発生します。
Oracle 11R2クライアントでこの問題に遭遇しました。私が到着する前に、Oracleインストーラがこれを行ったか、誰かがここでそれを行ったかどうかはわかりません。 64ビットと32ビットではなく、すべて64ビットでした。
エラーは、libexpat.so.1
がシンボリックリンクではなかったことです。
libexpat.so.1.5.2
とlibexpat.so.1
という2つの同一のファイルが存在することが判明しました。問題のあるファイルを削除し、1.5.2バージョンへのシンボリックリンクにすると、エラーがなくなりました。
よく知られた名前を現在のバージョンへのシンボリックリンクにしたいのは理にかなっています。これを行うと、古いライブラリになってしまう可能性は低くなります。
少なくとも質問の時点で解決しました。
尋ねる前にウェブで検索しましたが、決定的な解決策はありませんでした、このエラーの理由は次のとおりです:lib1.soとlib2.soはOKではありません。 lib3.soは64ビットライブラリです。少なくともそれは私のヒステシスです。
非常に残念なことに、ldconfigはライブラリをロードできなかったことを通知するクリーンなエラーメッセージを表示せず、ポンプするだけです。
ldconfig:/ folder_where_the_wicked_lib_is /はシンボリックリンクではありません
バイナリ上でlddで見つからないライブラリを削除したときに、これを解決しました。問題がどこにあるのかがわかりやすくなりました。
私のldバージョン:GNU ldバージョン2.20.51。最新バージョンの方がユーザーにより良いメッセージを持っているかどうかわかりません。
ありがとう。
以下のコマンドを実行しました。
export LD_LIBRARY_PATH=/usr/lib/
今では正常に動作しています。
ライブラリのパスを/etc/ld.so.confに含め、ldconfigを再実行してリストを更新する必要があります
他の可能性は、env変数LD_LIBRARY_PATHにライブラリへのパスを含め、実行可能ファイルを再実行することです。
有効なライブラリを指している場合は、シンボリックリンクを確認してください...
インクルードせずに、/ etc/ld.so.confにパスを直接追加できます...
実行ldconfig -p
は、ライブラリがキャッシュに適切に含まれているかどうかを確認します。
シェルでの単純な実行:Sudo apt-get install --reinstall libexpat1
libxcbで同じ問題を解決-この方法で解決-非常に高速:)