私の場合はLD_LIBRARY_PATH
空の文字列に設定されているようです。ただし、すべての標準システムツールはまだうまく機能しているため、動的リンカーがこの場合を確認し、LD_LIBRARY_PATH
この場合はいくつかのデフォルト値を使用しているようです。
このデフォルトは何ですか?少なくとも含まれているようですが、/usr/lib
他には何がありますか?動的リンカーが検索する標準位置を決定するための体系的で良い方法はありますか?
問題は、動的リンカーが検索するパスとは若干異なります。デフォルト値があるということは、与えられた場合はその値を使用しLD_LIBRARY_PATH
、指定されていない場合はデフォルト値を使用するという意味です。つまり、LD_LIBRARY_PATH
指定された場合はデフォルト値を使用しないことを意味します。
ベストアンサー1
Linux の一般的な動的リンカーは、キャッシュを使用してライブラリを検索します。キャッシュは、指定されたパス(現在一般的にのファイル)を見つけて に保存され、更新されます/etc/ld.so.cache
。を実行してその内容を一覧表示できます。ldconfig
/etc/ld.so.conf
/etc/ld.so.conf.d
ldconfig -p
したがって、デフォルト値はなく、LD_LIBRARY_PATH
デフォルトのライブラリルックアップにはデフォルト値はまったく必要ありません。定義されている場合はLD_LIBRARY_PATH
最初に使用されますが、他の検索(一部のデフォルトディレクトリも含む)は無効になりません。
これld.so(8)
マンページ詳細は次のとおりです。
共有ライブラリの依存関係にスラッシュが含まれていない場合は、次の順序で検索されます。
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
設定されていないか空の場合無視される。空白に設定した場合価値(LD_LIBRARY_PATH=:
たとえば)これらのnull値は現在のディレクトリとして解釈されました。