私の場合、LD_LIBRARY_PATH
が空の文字列に設定されているようです。しかし、すべての標準システムツールは引き続き正常に機能します。そのため、ダイナミックリンカーがそのケースをチェックし、そのケースではLD_LIBRARY_PATH
のデフォルトを使用すると思います。
そのデフォルト値は何ですか?少なくとも/usr/lib
が含まれていると思いますが、他に何がありますか?動的リンカーが検索する標準の場所を把握するための体系的な方法はありますか?
この質問は、ダイナミックリンカーが検索するパスとは少し異なります。デフォルト値があると、LD_LIBRARY_PATH
の値が指定されている場合はそれが使用され、指定されていない場合はデフォルト値が使用されます。 、LD_LIBRARY_PATH
が指定されている場合、デフォルト値は使用されません。
Linuxの通常のダイナミックリンカーは、キャッシュを使用してライブラリを検索します。キャッシュは_/etc/ld.so.cache
_に保存され、_/etc/ld.so.conf
_で指定されたパスを検索するldconfig
によって更新されます(現在、通常は_/etc/ld.so.conf.d
_内のファイル)。
したがって、_LD_LIBRARY_PATH
_のデフォルト値はありません。デフォルトのライブラリルックアップではまったく必要ありません。 _LD_LIBRARY_PATH
_が定義されている場合、それが最初に使用されますが、他のルックアップ(いくつかのデフォルトディレクトリも含む)は無効になりません。
ld.so(8)
manpage に詳細があります:
共有オブジェクトの依存関係にスラッシュが含まれていない場合は、次の順序で検索されます。
存在する場合は、バイナリの_
DT_RPATH
_動的セクション属性で指定されたディレクトリを使用し、_DT_RUNPATH
_属性は存在しません。 _DT_RPATH
_の使用は非推奨です。環境変数_
LD_LIBRARY_PATH
_を使用します。ただし、実行可能ファイルがセキュア実行モード(下記参照)で実行されている場合は無視されます。存在する場合、バイナリの_
DT_RUNPATH
_動的セクション属性で指定されたディレクトリを使用します。拡張ライブラリパスで以前に見つかった候補共有オブジェクトのコンパイル済みリストを含むキャッシュファイル_
/etc/ld.so.cache
_から。ただし、バイナリが_-z nodeflib
_リンカーオプションでリンクされている場合、デフォルトパスの共有オブジェクトはスキップされます。ハードウェア機能ディレクトリ(以下を参照)にインストールされた共有オブジェクトは、他の共有オブジェクトよりも優先されます。デフォルトのパスでは_
/lib
_、次に_/usr/lib
_。 (一部の64ビットアーキテクチャでは、64ビット共有オブジェクトのデフォルトパスは_/lib64
_、次に_/usr/lib64
_です。)バイナリが_-z nodeflib
_リンカーオプションでリンクされている場合、この手順スキップされます。
_LD_LIBRARY_PATH
_が空の場合、それは 無視されます です。空に設定されている場合values(たとえば、_LD_LIBRARY_PATH=:
_を使用)、これらの空の値は 現在のディレクトリとして解釈されます 。