LD.SO
Section: Linux Programmer's Manual (8)
Updated: 2007-05-31
Index
JM Home Page
roff page
名前
ld.so, ld-linux.so* - 動的なリンカ/ローダ
書式
動的リンカは、動的にリンクされたプログラムやライブラリの実行によって
間接的に実行することができる
(ELF の場合、動的リンカにコマンドラインオプションを渡すことはできず、
プログラムの
.interp
セクションに入っている動的リンカが実行される)。
また以下のように直接実行することもできる
/lib/ld-linux.so.*
[OPTIONS] [PROGRAM [ARGUMENTS]]
説明
プログラム
ld.so
と
ld-linux.so*
はプログラムに必要な共有ライブラリを見つけてロードし、
プログラムの実行を準備してから起動させる。
Linux のバイナリは、コンパイルの時に
ld(1)
に対して
-static
オプションが指定されていない限り、動的リンク (実行時リンク) が必要となる。
プログラム
ld.so
は a.out バイナリを扱う。
これはずっと昔に使われていたフォーマットである。
ld-linux.so*
(libc5 では /lib/ld-linux.so.1,
glibc2 では /lib/ld-linux.so.2)
は ELF バイナリを扱う。
このフォーマットは多くの人が最近何年も使っている。
それ以外の点では両方とも同じように動作し、
同じサポートファイルとプログラム
ldd(1),
ldconfig(8),
/etc/ld.so.conf
を使用する。
プログラムで必要とされる共有ライブラリは、
いろいろな場所から検索される。
- o
-
(ELF のみ)
バイナリの動的セクション属性 DT_RPATH が存在し、
DT_RUNPATH 属性が存在しない場合は、DT_RPATH を用いる。
DT_RPATH の使用は推奨されない。
- o
-
環境変数
LD_LIBRARY_PATH
を用いる。
ただし実行ファイルが set-user-ID/set-group-ID バイナリの場合、
これは無視される。
- o
-
(ELF のみ)
バイナリの動的セクション属性 DT_RUNPATH を用いる (存在する場合) 。
- o
-
キャッシュファイル
/etc/ld.so.cache
を探す。このファイルは、
(ld.so.conf で追加指定されたものも含めた) ライブラリ検索パスから
見つかったライブラリファイルの情報を集めたものである。
ただしバイナリがリンカオプション
-z nodeflib
でリンクされている場合は、デフォルトのライブラリパスにある
ライブラリはスキップされる。
- o
-
デフォルトパスである
/lib、
次いで
/usr/lib
を用いる。
バイナリがリンカオプション
-z nodeflib
でリンクされている場合、このステップはスキップされる。
$ORIGIN と rpath
ld.so
では、rpath 指定 (DT_RPATH や DT_RUNPATH) 中に
$ORIGIN
という文字列
(${ORIGIN}
も等価) を使うことができる。
$ORIGIN
はアプリケーションの実行ファイルが入っているディレクトリを表す。
これを使って
somedir/app
に置かれたアプリケーションを
gcc -Wl,-rpath,'$ORIGIN/../lib'
でコンパイルすると、
somedir
がディレクトリ階層のどこにあっても、アプリケーションは
somedir/lib
にある対応する共有ライブラリを見つけることができる。
この機能を使うと、
特別なディレクトリではなく任意のディレクトリにインストールしても
"ややこしい設定なしで"
独自の共有ライブラリを使えるアプリケーションを作成することができる。
オプション
- --list
-
全ての依存関係とその解決法をリストする。
- --verify
-
プログラムが動的にリンクされているかと、
動的リンカがそのプログラムを扱えるかを検証する。
- --library-path PATH
-
LD_LIBRARY_PATH
環境変数の設定を上書きする (下記参照)。
- --inhibit-rpath LIST
-
LIST にあるオブジェクト名の RPATH と RUNPATH の情報を無視する。
環境変数
4 つの重要な環境変数がある。
- LD_LIBRARY_PATH
-
コロン区切りのディレクトリリスト。
実行時に ELF ライブラリを検索するディレクトリを指定する。
PATH
環境変数と同じように指定する。
- LD_PRELOAD
-
スペース区切りで ELF 共有ライブラリを指定する。
これはユーザーが指定でき、すべてのライブラリに先立ってロードされる。
他の共有ライブラリにある関数を選択的に置き換えるために用いることができる。
set-user-ID/set-group-ID された ELF バイナリに対して、
標準的な検索パスにあるライブラリのうち set-user-ID されているものはロードしない。
- LD_BIND_NOW
-
(libc5; glibc 2.1.1 以降)
空文字列でない場合、
動的リンカはプログラムの開始時に全てのシンボルを解決する。
空文字列の場合、解決しなければならない関数呼び出しが
最初に参照された時点で解決する。
デバッガを使っているときに役立つ。
- LD_TRACE_LOADED_OBJECTS
-
(ELF のみ)
空文字列でない場合、
プログラムを普通に実行するのではなく、
ldd(1)
を実行したときのように動的ライブラリの依存関係をリスト表示させる。
そして、それほど知られていない環境変数もある。
多くは廃れてしまったものか内部でのみ使用される環境変数である。
- LD_WARN
-
(ELF のみ)(glibc 2.1.3 以降)
空文字列でない場合、解決されていないシンボルがあれば警告を出す。
- LD_NOWARN
-
(a.out のみ)(libc5)
a.out ライブラリにおけるマイナーバージョン番号の非互換に
対する警告メッセージを抑制する。
- LD_BIND_NOT
-
(glibc 2.1.95 以降)
シンボルを解決した後、GOT (global offset table) と
PLT (procedure linkage table) を更新しない。
- LD_DEBUG
-
(glibc 2.1 以降)
動的リンカの詳細なデバッグ情報を出力する。
all
に設定した場合、全ての動的リンカが持つデバッグ情報を表示する。
help
に設定した場合、この環境変数で指定されるカテゴリのヘルプ情報を表示する。
- LD_DEBUG_OUTPUT
-
(glibc 2.1 以降)
LD_DEBUG
の出力を書き込むファイル。
デフォルトは標準出力である。
set-user-ID/set-group-ID されたバイナリでは、
LD_DEBUG_OUTPUT
は無視される。
- LD_VERBOSE
-
(glibc 2.1 以降)
空文字列でない場合に、
(LD_TRACE_LOADED_OBJECTS
を設定するか、
--list
または
--verify
オプションを動的リンカに指定することにより)
プログラムについての情報を問い合わせると、
プログラムのシンボルバージョン情報を表示する。
- LD_PROFILE
-
(glibc 2.1 以降)
プロファイルを行う共有オブジェクト。
- LD_PROFILE_OUTPUT
-
(glibc 2.1 以降)
LD_PROFILE
の出力を書き込むファイル。
デフォルトは標準出力である。
set-user-ID/set-group-ID されたバイナリでは、
LD_PROFILE_OUTPUT は無視される。
- LD_AOUT_LIBRARY_PATH
-
(libc5)
a.out バイナリにのみ使われる環境変数で、
LD_LIBRARY_PATH
と同じ役割をする。
ld-linux.so.1 の古いバージョンでは
LD_ELF_LIBRARY_PATH
もサポートしていた。
- LD_AOUT_PRELOAD
-
(libc5)
a.out バイナリにのみ使われる環境変数で、
LD_PRELOAD
と同じ役割をする。
ld-linux.so.1 の古いバージョンでは
LD_ELF_PRELOAD
もサポートしていた。
- LD_SHOW_AUXV
-
(glibc 2.1 以降)
カーネルから渡される補助的な (パラメータの) 配列を表示する。
- LD_HWCAP_MASK
-
(glibc 2.1 以降)
ハードウェア機能のマスク。
- LD_ORIGIN_PATH
-
(glibc 2.1 以降)
バイナリへのパス (set-user-ID されていないプログラムについて)。
- LD_DYNAMIC_WEAK
-
(glibc 2.1.19 以降)
上書きされる弱いシンボル (昔の glibc の挙動を逆にする)。
- LD_KEEPDIR
-
(a.out のみ)(libc5)
ロードする a.out ライブラリの名前において、ディレクトリを無視しない。
このオプションは用いるべきではない。
- LDD_ARGV0
-
(libc5)
ldd(1)
の引き数がない場合に、
argv[0]
として使われる値。
ファイル
- /lib/ld.so
-
a.out の動的リンカ/ローダ
- /lib/ld-linux.so.{1,2}
-
ELF の動的リンカ/ローダ
- /etc/ld.so.cache
-
ライブラリを検索するディレクトリを集めたリストと、
共有ライブラリの候補の整列リストを含むファイル。
- /etc/ld.so.preload
-
プログラムの前にロードすべき ELF 共有ライブラリを
スペースで区切ったリストが書かれているファイル。
- lib*.so*
-
共有ライブラリ
注意
ld.so
の機能は libc のバージョン 4.4.3 以上を用いてコンパイルされた
実行ファイルで使用可能である。
ELF の機能は Linux 1.1.52 以降と libc5 以降で使用可能である。
関連項目
ldd(1),
ldconfig(8)
Index
- 名前
-
- 書式
-
- 説明
-
- $ORIGIN と rpath
-
- オプション
-
- 環境変数
-
- ファイル
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:49 GMT, November 19, 2007