スポンサーリンク

RTLD(1) FreeBSD 一般コマンドマニュアル RTLD(1)

名称

ld-elf.so.1, ld.so, rtld − 実行時リンクエディタ

解説

ld-elf.so.1 ユーティリティは自己完結した共有オブジェクトで、実行時にプロ セスのアドレス空間に共有オブジェクトを読み込んで編集する機能を提供しま す。一般には動的リンカという名前でも知られています。動的リンクされたプロ グラムに含まれるデータ構造を使ってどの共有ライブラリが必要なのかを決定 し、 mmap(2) システムコールを使ってそれらを読み込みます。

全ての共有ライブラリを読み込むことに成功すると、次に ld-elf.so.1 はメイン プログラムおよび読み込んだ全てのオブジェクトからの外部参照を解決します。 プログラム本体の実行が始まる前になんらかの設定をする機会を共有オブジェク トに与えるために、オブジェクトごとに初期化ルーチンを呼ぶ機構があります。 これは静的コンストラクタを含むような C++ ライブラリにとって有用です。

実行されるプログラムが動的にリンクされている場合には、そのプログラムと一 緒に ld-elf.so.1 ユーティリティ自体がカーネルによって読み込まれます。そし てカーネルは動的リンカに制御を移します。動的リンカがプログラムとそれに必 要な共有オブジェクトの読み込み、再配置、初期化を終えると、プログラムのエ ントリポイントに制御を移します。

ファイルシステム中にある必要な共有オブジェクトを探索するために、 ld-elf.so.1ldconfig(8) ユーティリティによって用意される ‘‘hints’’ ファイルを使います。

ld-elf.so.1 ユーティリティは以下に挙げるような、自身の動作を変えるために 使用されるいくつかの環境変数を認識します:

       LD_DUMP_REL_POST

これが設定されていた場合、シンボル束縛と再配置の後に、 ld-elf.so.1 は全再配置を含む表を表示します。

LD_DUMP_REL_PRE
これが設定されていた場合、シンボル束縛と再配置の前に、 ld-elf.so.1 は全再配置を含む表を表示します。

LD_LIBMAP
ライブラリー置換リストで、形式は libmap.conf(5) と同じ です。便利なように、空白と改行のかわりに ‘=’ と ‘,’ の 文字を使うことができます。この変数は libmap.conf(5) の 後に解析され、このファイルで指定された項目を上書きしま す。

LD_LIBMAP_DISABLE
これが設定されていた場合、 libmap.conf(5) および LD_LIBMAP の使用を無効化します。

LD_LIBRARY_PATH
コロンで区切られたディレクトリのリストで、共有ライブラ リのデフォルトサーチパスを上書きします。この環境変数 は、 set-user-ID 及び set-group-ID されたプログラムに おいては無視されます。

LD_PRELOAD
他の共有ライブラリより前にリンクされるべき共有ライブラ リのリストで、コロンか空白で区切られています。もしディ レクトリが指定されていないならば、最初に LD_LIBRARY_PATH で指定されるディレクトリから、続いて組 み込みの標準ディレクトリ群から検索されます。この環境変 数は、 set-user-ID 及び set-group-ID されたプログラム においては無視されます。

LD_BIND_NOW
空ではない文字列が設定されている場合には、 ld-elf.so.1 は、全ての外部関数呼び出しをプログラムの実行を始める前 に再配置します。通常、関数呼び出しの結合は遅延方式 (lazy binding) で行われます。すなわち、関数呼び出しは それぞれの関数が最初に呼ばれる時に結合されます。 LD_BIND_NOW はプログラムの起動時間を増加させますが、実 行時に思いもかけず関数が定義されていなかったという事件 は避けられます。

LD_TRACE_LOADED_OBJECTS
空ではない文字列が設定されている場合には、 ld-elf.so.1 は共有オブジェクトを読み込んで、全てのオブジェクトの絶 対パス名を含む概要を標準出力に表示した後に終了します。

LD_TRACE_LOADED_OBJECTS_ALL
空ではない文字列に設定されている場合には、どのオブジェ クトがどのオブジェクトのロードの原因となったのかという まとめを ld-elf.so.1 が展開するようにさせます。

LD_TRACE_LOADED_OBJECTS_FMT1

LD_TRACE_LOADED_OBJECTS_FMT2
設定されている場合には、これらの変数はトレース出力をカ スタマイズするための printf(3) 流フォーマット文字列と して解釈されます。 ldd(1)−f オプションがこれらを使 用するので、 ldd(1) をより便利にフィルタとして使うこと ができます。以下の変換を使うことができます:

%a
メインプログラムの名前 (またの名を ‘‘__progname’’) 。

%A
LD_TRACE_LOADED_OBJECTS_PROGNAME 環境変数の値。

%o
ライブラリの名前。

%m
ライブラリのメジャーバージョン番号。

%p
rtld
のライブラリ検索ルールで決定されるフルパス 名。

%x
ライブラリのロードアドレス。

さらに、 ‘\n’ と ‘\t’ が認識され、通常の意味をもちま す。

関連ファイル

       /var/run/ld-elf.so.hints

/etc/libmap.conf
libmap の設定ファイル。

関連項目

ld(1), ldd(1), elf(5), libmap.conf(5), ldconfig(8)

FreeBSD 10.0 May 31, 2003 FreeBSD 10.0

スポンサーリンク