LD_LIBRARY_PATHのデフォルト値は何ですか? [コピー]

LD_LIBRARY_PATHのデフォルト値は何ですか? [コピー]

私の場合は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.dldconfig -p

したがって、デフォルト値はなく、LD_LIBRARY_PATHデフォルトのライブラリルックアップにはデフォルト値はまったく必要ありません。定義されている場合はLD_LIBRARY_PATH最初に使用されますが、他の検索(一部のデフォルトディレクトリも含む)は無効になりません。

これld.so(8)マンページ詳細は次のとおりです。

共有ライブラリの依存関係にスラッシュが含まれていない場合は、次の順序で検索されます。

  • DT_RPATHDT_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値は現在のディレクトリとして解釈されました

おすすめ記事