OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / release / man8 / ld.so.8
1 .\" %%%LICENSE_START(PUBLIC_DOMAIN)
2 .\" This is in the public domain
3 .\" %%%LICENSE_END
4 .\"
5 .\"*******************************************************************
6 .\"
7 .\" This file was generated with po4a. Translate the source file.
8 .\"
9 .\"*******************************************************************
10 .\"
11 .\" Japanese Version Copyright (c) 1998 NAKANO Takeo all rights reserved.
12 .\" Translated 1998-05-23, NAKANO Takeo <nakano@apm.seikei.ac.jp>
13 .\" Updated & Modified 1999-09-14, NAKANO Takeo
14 .\" Updated & Modified 2002-01-17, Yuichi SATO <ysato@h4.dion.ne.jp>
15 .\" Updated & Modified 2002-07-15, Yuichi SATO
16 .\" Updated 2007-06-13, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.55
17 .\" Updated 2010-04-23, Akihiro MOTOKI, LDP v3.24
18 .\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
19 .\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
20 .\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
21 .\" Updated 2013-08-16, Akihiro MOTOKI <amotoki@gmail.com>
22 .\"
23 .TH LD.SO 8 2014\-12\-31 GNU "Linux Programmer's Manual"
24 .SH 名前
25 ld.so, ld\-linux.so* \- 動的なリンカー/ローダー
26 .SH 書式
27 動的リンカーは、動的にリンクされたプログラムやライブラリの実行によって 間接的に実行することができる (ELF
28 の場合、動的リンカーにコマンドラインオプションを渡すことはできず、 プログラムの \fB.interp\fP
29 セクションに入っている動的リンカーが実行される)。 また以下のように直接実行することもできる
30 .P
31 \fI/lib/ld\-linux.so.*\fP [OPTIONS] [PROGRAM [ARGUMENTS]]
32 .SH 説明
33 プログラム \fBld.so\fP と \fBld\-linux.so*\fP はプログラムに必要な共有ライブラリを見つけてロードし、
34 プログラムの実行を準備してから起動させる。
35 .LP
36 Linux のバイナリは、コンパイルの時に \fBld\fP(1)  に対して \fB\-static\fP オプションが指定されていない限り、動的リンク
37 (実行時リンク) が必要となる。
38 .LP
39 プログラム \fBld.so\fP は a.out バイナリを扱う。 これはずっと昔に使われていたフォーマットである。 \fBld\-linux.so*\fP
40 (libc5 では \fI/lib/ld\-linux.so.1\fP, glibc2 では \fI/lib/ld\-linux.so.2\fP)  は ELF
41 バイナリを扱う。 このフォーマットは多くの人が最近何年も使っている。 それ以外の点では両方とも同じように動作し、 同じサポートファイルとプログラム
42 \fBldd\fP(1), \fBldconfig\fP(8), \fI/etc/ld.so.conf\fP を使用する。
43 .LP
44 ライブラリの依存関係を解決する際、動的リンカーは、最初に、依存関係の各文字列がスラッシュを含んでいるかをチェックする
45 (この状況になるのは、リンク時にスラッシュを含むライブラリのパス名が指定された場合である)。スラッシュが見つかった場合、その依存関係の文字列はパス名
46 (相対パス、絶対パスのどちらも可) として解釈され、そのパス名を使ってそのライブラリはロードされる。
47 .LP
48 ライブラリの依存関係にスラッシュが含まれない場合、以下の順序で検索される。
49 .IP o 3
50 (ELF のみ)  バイナリの動的セクション属性 DT_RPATH が存在し、 DT_RUNPATH 属性が存在しない場合は、 DT_RPATH
51 で指定されたディレクトリを使用する。 DT_RPATH の使用は推奨されない。
52 .IP o
53 環境変数 \fBLD_LIBRARY_PATH\fP を用いる。 ただし実行ファイルが set\-user\-ID/set\-group\-ID バイナリの場合、
54 これは無視される。
55 .IP o
56 (ELF のみ)  バイナリの動的セクション属性 DT_RUNPATH が存在すれば、 DT_RUNPATH で指定されたディレクトリを使用する。
57 .IP o
58 キャッシュファイル \fI/etc/ld.so.cache\fP を探す。このファイルは、 (ld.so.conf で追加指定されたものも含めた)
59 ライブラリ検索パスから見つかったライブラリファイルの情報を集めたものである。ただし、バイナリがリンカーオプション \fB\-z nodeflib\fP
60 でリンクされている場合は、デフォルトのライブラリパスにある ライブラリはスキップされる。ハードウェア機能ディレクトリ (下記参照)
61 にインストールされたライブラリは、他のライブラリよりも優先される。
62 .IP o
63 デフォルトパスである \fI/lib\fP、 次いで \fI/usr/lib\fP を用いる。 バイナリがリンカーオプション \fB\-z nodeflib\fP
64 でリンクされている場合、このステップはスキップされる。
65 .SS "rpath トークンの展開"
66 .PP
67 \fBld.so\fP では rpath 指定 (DT_RPATH や DT_RUNPATH) 中にいくつかの特定の文字列を使うことができる。
68 それらの文字列は以下のように置き換えられる。
69 .TP 
70 \fI$ORIGIN\fP (\fI${ORIGIN}\fP も同じ)
71 プログラムや共有ライブラリが入っているディレクトリに展開される。 したがって、 \fIsomedir/app\fP に置かれたアプリケーションを
72
73     gcc \-Wl,\-rpath,\(aq$ORIGIN/../lib\(aq
74
75 でコンパイルすることで、 \fIsomedir\fP がディレクトリ階層のどこにあっても、 \fBld.so\fP は \fIsomedir/lib\fP
76 にある対応する共有ライブラリを見つけることができる。 この機能を使うと、
77 特別なディレクトリではなく任意のディレクトリにインストールしても「ややこしい設定なしで」独自の共有ライブラリを使えるアプリケーションを作成することができる。
78 .TP 
79 \fI$LIB\fP (\fI${LIB}\fP も同じ)
80 アーキテクチャーに応じて \fIlib\fP か \fIlib64\fP に展開される (例えば、 x86\-64 では \fIlib64\fP に、 x86\-32 では
81 \fIlib\fP に展開される)。
82 .TP 
83 \fI$PLATFORM\fP (\fI${PLATFORM}\fP も同じ)
84 .\" To get an idea of the places that $PLATFORM would match,
85 .\" look at the output of the following:
86 .\"
87 .\"     mkdir /tmp/d
88 .\"     LD_LIBRARY_PATH=/tmp/d strace -e open /bin/date 2>&1 | grep /tmp/d
89 .\"
90 .\" ld.so lets names be abbreviated, so $O will work for $ORIGIN;
91 .\" Don't do this!!
92 ホストシステムのプロセッサ種別に対応する文字列に展開される (例えば "x86_64")。
93 いくつかのアーキテクチャーでは、 Linux カーネルから動的リンカーにプラットフォームを表す文字列が提供されない。 この文字列の値は補助ベクトルの
94 \fBAT_PLATFORM\fP 値から取得される (\fBgetauxval\fP(3) 参照)。
95 .SH オプション
96 .TP 
97 \fB\-\-list\fP
98 全ての依存関係とその解決法をリストする。
99 .TP 
100 \fB\-\-verify\fP
101 プログラムが動的にリンクされているかと、 動的リンカーがそのプログラムを扱えるかを検証する。
102 .TP 
103 \fB\-\-inhibit\-cache\fP
104 /etc/ld.so.cache を使用しない。
105 .TP 
106 \fB\-\-library\-path PATH\fP
107 \fBLD_LIBRARY_PATH\fP 環境変数の設定ではなく、
108 指定した PATH を使用する (下記参照)。
109 .TP 
110 \fB\-\-inhibit\-rpath LIST\fP
111 LIST にあるオブジェクト名の RPATH と RUNPATH の情報を無視する。 \fBld.so\fP が set\-user\-ID か
112 set\-group\-ID されている場合、 このオプションは無視される。
113 .TP 
114 \fB\-\-audit LIST\fP
115 LIST で指定された名前のオブジェクトを監査者として使用する。
116 .SH ハードウェア機能
117 いくつかのライブラリは、(すべての CPU に存在するわけではない)ハードウェア固有
118 の命令を使ってコンパイルされている。そのようなライブラリは、
119 \fI/usr/lib/sse2/\fP のような、必要なハードウェア機能 (hardware capability) を規
120 定する名前のディレクトリにインストールすべきである。
121 動的リンカーは、マシンのハードウェアに基づいてこれらのディレクトリを確認し、
122 指定されたライブラリに最も適したバージョンを選択する。
123 ハードウェア機能ディレクトリはつなげることができ、
124 複数の CPU 機能を組み合わることができる。
125 対応しているハードウェア機能名のリストは CPU に依存する。
126 現在のところ、以下の名前が認識される。
127 .TP 
128 \fBAlpha\fP
129 ev4, ev5, ev56, ev6, ev67
130 .TP 
131 \fBMIPS\fP
132 loongson2e, loongson2f, octeon, octeon2
133 .TP 
134 \fBPowerPC\fP
135 4xxmac, altivec, arch_2_05, arch_2_06, booke, cellbe, dfp, efpdouble,
136 efpsingle, fpu, ic_snoop, mmu, notb, pa6t, power4, power5, power5+, power6x,
137 ppc32, ppc601, ppc64, smt, spe, ucache, vsx
138 .TP 
139 \fBSPARC\fP
140 flush, muldiv, stbar, swap, ultra3, v9, v9v, v9v2
141 .TP 
142 \fBs390\fP
143 dfp, eimm, esan3, etf3enh, g5, highgprs, hpage, ldisp, msa, stfle, z900,
144 z990, z9\-109, z10, zarch
145 .TP 
146 \fBx86 (32\-bit のみ)\fP
147 acpi, apic, clflush, cmov, cx8, dts, fxsr, ht, i386, i486, i586, i686, mca,
148 mmx, mtrr, pat, pbe, pge, pn, pse36, sep, ss, sse, sse2, tm
149 .SH 環境変数
150 重要な環境変数には以下のものがある。
151 .TP 
152 \fBLD_ASSUME_KERNEL\fP
153 (glibc 2.2.3 以降)  各共有ライブラリは動的リンカーに必要なカーネル ABI の最小バージョンを通知することができる (必要なバージョンは
154 ELF の note section に格納され、 \fIreadelf\ \-n\fP で \fBNT_GNU_ABI_TAG\fP
155 のラベルが付いたセクションとして見ることができる)。 実行時に、 動的リンカーは実行中のカーネルの ABI バージョンを判定し、 カーネルの ABI
156 バージョンよりも大きな ABI の最小バージョンが指定された共有ライブラリのロードを行わない。
157
158 \fBLD_ASSUME_KERNEL\fP を使うことで、 動的リンカーに、 異なるカーネル ABI
159 バージョンのシステムで実行されているかのように見せることができる。 例えば、 以下のコマンドラインを実行すると、 動的リンカーは \fImyprog\fP
160 が必要とする共有ライブラリをロードする際に Linux 2.2.5 上で動作していると仮定する。
161
162 .in +4n
163 .nf
164 $ \fBLD_ASSUME_KERNEL=2.2.5 ./myprog\fP
165 .fi
166 .in
167
168 必要なカーネル ABI の最低バージョンが異なる複数の共有ライブラリが (検索パス中の異なるディレクトリに) あるシステムでは、
169 \fBLD_ASSUME_KERNEL\fP を使って (ディレクトリ検索順序に基づき) 使用するライブラリのバージョンを選択することができる。
170 歴史的に見ると、 \fBLD_ASSUME_KERNEL\fP の最も一般的な使い道は、 LinuxThreads と NPTL
171 の両方を提供しているシステムで、 古い LinuxThreads の POSIX スレッド実装を手動で選択するためであった
172 (そのようなシステムでは、通常は NPTL がデフォルトであった)。 \fBpthreads\fP(7) を参照。
173 .TP 
174 \fBLD_BIND_NOT\fP
175 (glibc 2.2 以降) シンボルを解決した際、Global Offset Table (GOT) と Procedure Linkage
176 Table (PLT) を更新しない。
177 .TP 
178 \fBLD_BIND_NOW\fP
179 (libc5; glibc 2.1.1 以降)  空文字列でない場合、 動的リンカーはプログラムの開始時に全てのシンボルを解決する。
180 空文字列の場合、解決しなければならない関数呼び出しが 最初に参照された時点で解決する。 デバッガを使っているときに役立つ。
181 .TP 
182 \fBLD_LIBRARY_PATH\fP
183 コロン区切りのディレクトリのリスト。実行時に ELF ライブラリを検索するディレクトリを指定する。 \fBPATH\fP 環境変数と同じように指定する。
184 set\-user\-ID/set\-group\-ID されたプログラムでは無視される。
185 .TP 
186 \fBLD_PRELOAD\fP
187 追加でユーザーが指定する ELF
188 共有ライブラリのリスト。指定されたライブラリは、すべてのライブラリより前にロードされる。リストの区切りはスペースとコロンである。他の共有ライブラリにある関数を選択的に置き換えるために用いることができる。指定されたライブラリは「説明」の節で述べたルールを基いて検索される。
189 set\-user\-ID/set\-group\-ID された ELF
190 バイナリでは、スラッシュを含んだパス名のライブラリは無視され、標準の検索ディレクトリのライブラリはそのライブラリファイルの set\-user\-ID
191 許可ビットが有効になっている場合のみロードされる。
192 .TP 
193 \fBLD_TRACE_LOADED_OBJECTS\fP
194 (ELF のみ)  空文字列でない場合、 プログラムを普通に実行するのではなく、 \fBldd\fP(1)
195 を実行したときのように動的ライブラリの依存関係をリスト表示させる。
196 .LP
197 そして、それほど知られていない環境変数もある。 多くは廃れてしまったものか内部でのみ使用される環境変数である。
198 .TP 
199 \fBLD_AOUT_LIBRARY_PATH\fP
200 (libc5)  a.out バイナリにのみ使われる環境変数で、 \fBLD_LIBRARY_PATH\fP と同じ役割をする。 ld\-linux.so.1
201 の古いバージョンでは \fBLD_ELF_LIBRARY_PATH\fP もサポートしていた。
202 .TP 
203 \fBLD_AOUT_PRELOAD\fP
204 (libc5)  a.out バイナリにのみ使われる環境変数で、 \fBLD_PRELOAD\fP と同じ役割をする。 ld\-linux.so.1
205 の古いバージョンでは \fBLD_ELF_PRELOAD\fP もサポートしていた。
206 .TP 
207 \fBLD_AUDIT\fP
208 (glibc 2.4 以降)  他のオブジェクトよりも前に、別のリンカー名前空間 (そのプロセスで行われる 通常のシンボル結合 (symbol
209 bindigns) には関与しない名前空間) で ロードされる、ユーザー指定の ELF 共有オブジェクトのコロン区切りのリスト。
210 これらのライブラリを使って、動的リンカーの動作を監査することができる。 set\-user\-ID/set\-group\-ID されたバイナリでは、
211 \fBLD_AUDIT\fP は無視される。
212
213 動的リンカーは、いわゆる監査チェックポイント (auditing checkpoints)  において、監査 (audit)
214 ライブラリの適切な関数を呼び出すことで、 監査ライブラリへの通知を行う。監査チェックポイントの例としては、
215 新たなライブラリのロード、シンボルの解決、別の共有オブジェクト からのシンボルの呼び出し、などがある。 詳細は \fBrtld\-audit\fP(7)
216 を参照してほしい。 audit インターフェースは、Solaris で提供されているものと 大部分は互換性がある。Solaris の audit
217 インターフェースについては、 \fILinker and Libraries Guide\fP の \fIRuntime Linker Auditing
218 Interface\fP の章に説明がある。
219 .TP 
220 \fBLD_BIND_NOT\fP
221 (glibc 2.1.95 以降)  シンボルを解決した後、GOT (global offset table) と PLT (procedure
222 linkage table) を更新しない。
223 .TP 
224 \fBLD_DEBUG\fP
225 (glibc 2.1 以降)  動的リンカーの詳細なデバッグ情報を出力する。 \fBall\fP
226 に設定した場合、全ての動的リンカーが持つデバッグ情報を表示する。 \fBhelp\fP
227 に設定した場合、この環境変数で指定されるカテゴリーのヘルプ情報を表示する。 glibc 2.3.4 以降、
228 set\-user\-ID/set\-group\-ID されたバイナリでは \fBLD_DEBUG\fP は無視される。
229 .TP 
230 \fBLD_DEBUG_OUTPUT\fP
231 (glibc 2.1 以降)  \fBLD_DEBUG\fP の出力を書き込むファイル。 デフォルトは標準エラーである。
232 set\-user\-ID/set\-group\-ID されたバイナリでは、 \fBLD_DEBUG_OUTPUT\fP は無視される。
233 .TP 
234 \fBLD_DYNAMIC_WEAK\fP
235 (glibc 2.1.19 以降)  上書きされる弱いシンボル (昔の glibc の挙動を逆にする)。 セキュリティ上の理由から、glibc
236 2.3.4 以降、 set\-user\-ID/set\-group\-ID されたバイナリでは \fBLD_DYNAMIC_WEAK\fP は無視される。
237 .TP 
238 \fBLD_HWCAP_MASK\fP
239 (glibc 2.1 以降)  ハードウェア機能のマスク。
240 .TP 
241 \fBLD_KEEPDIR\fP
242 (a.out のみ)(libc5)  ロードする a.out ライブラリの名前において、ディレクトリを無視しない。 このオプションは用いるべきではない。
243 .TP 
244 \fBLD_NOWARN\fP
245 (a.out のみ)(libc5)  a.out ライブラリにおけるマイナーバージョン番号の非互換に 対する警告メッセージを抑制する。
246 .TP 
247 \fBLD_ORIGIN_PATH\fP
248 .\" Only used if $ORIGIN can't be determined by normal means
249 .\" (from the origin path saved at load time, or from /proc/self/exe)?
250 (glibc 2.1 以降)  バイナリへのパス (set\-user\-ID されていないプログラムについて)。 セキュリティ上の理由から、glibc
251 2.3.4 以降、 set\-user\-ID/set\-group\-ID されたバイナリでは \fBLD_ORIGIN_PATH\fP は無視される。
252 .TP 
253 \fBLD_POINTER_GUARD\fP
254 (glibc 2.4 以降)  0 に設定すると、ポインター保護 (pointer guarding) が無効になる。
255 それ以外の値の場合はポインター保護が有効になる。 デフォルトはポインター保護有効である。
256 ポインター保護はセキュリティ機構の一つで、書き込み可能なプログラムメモリー に格納されたコードへのポインターをほぼランダム化することで、
257 攻撃者がバッファーオーバーランやスタック破壊 (stack\-smashing) 攻撃の際に ポインターを乗っ取ることを困難にするものである。
258 .TP 
259 \fBLD_PROFILE\fP
260 (glibc 2.1 以降)  プロファイルを行う共有オブジェクトの名前。 パス名か共有オブジェクト名 (soname) で指定される。
261 プロフィールの出力は "\fI$LD_PROFILE_OUTPUT\fP/\fI$LD_PROFILE\fP.profile" という名前の ファイルに追記される。
262 .TP 
263 \fBLD_PROFILE_OUTPUT\fP
264 (glibc 2.1 以降)  \fBLD_PROFILE\fP の出力が書き込まれるディレクトリ。
265 この変数が定義されていないか、空の文字列が定義されている場合、 デフォルト値は \fI/var/tmp\fP となる。
266 set\-user\-ID/set\-group\-ID されたプログラムでは、 LD_PROFILE_OUTPUT は無視される。 出力ファイルは常に
267 \fI/var/profile\fP が使用される。
268 .TP 
269 \fBLD_SHOW_AUXV\fP
270 .\" FIXME
271 .\" Document LD_TRACE_PRELINKING (e.g.: LD_TRACE_PRELINKING=libx1.so ./prog)
272 .\"     Available since glibc 2.3
273 .\"     Also enables DL_DEBUG_PRELINK
274 (glibc 2.1 以降)  カーネルから渡される補助的な (パラメーターの) 配列を表示する。 セキュリティ上の理由から、glibc 2.3.4
275 以降、 set\-user\-ID/set\-group\-ID されたバイナリでは \fBLD_SHOW_AUXV\fP は無視される。
276 .TP 
277 \fBLD_USE_LOAD_BIAS\fP
278 .\" http://sources.redhat.com/ml/libc-hacker/2003-11/msg00127.html
279 .\" Subject: [PATCH] Support LD_USE_LOAD_BIAS
280 .\" Jakub Jelinek
281 デフォルトでは (つまり、この変数が定義されていない場合)、 実行ファイルと prelink された共有オブジェクトでは、それらが依存する
282 ライブラリのベースアドレスが尊重される一方、 (prelink されていない) position\-independent executables
283 (PIEs) と 他の共有オブジェクトでは依存するライブラリのベースアドレスは 尊重されない。 \fBLD_USE_LOAD_BIAS\fP が値 1
284 で定義された場合、実行ファイルと PIE のどちらでも ベースアドレスが尊重される。 \fBLD_USE_LOAD_BIAS\fP が値 0
285 で定義された場合、実行ファイルと PIE のどちらでも ベースアドレスは尊重されない。 set\-user\-ID や set\-group\-ID
286 されたプログラムでは、 この変数は無視される。
287 .TP 
288 \fBLD_VERBOSE\fP
289 (glibc 2.1 以降) 空文字列でない場合に、\fBLD_TRACE_LOADED_OBJECTS\fP
290 環境変数が設定されていれば、プログラムのシンボルバージョン情報を出力する。
291 .TP 
292 \fBLD_WARN\fP
293 (ELF のみ)(glibc 2.1.3 以降)  空文字列でない場合、解決されていないシンボルがあれば警告を出す。
294 .TP 
295 \fBLDD_ARGV0\fP
296 (libc5)  \fBldd\fP(1)  の引き数がない場合に、 \fIargv\fP[0] として使われる値。
297 .SH ファイル
298 .PD 0
299 .TP 
300 \fI/lib/ld.so\fP
301 a.out の動的リンカー/ローダー
302 .TP 
303 \fI/lib/ld\-linux.so.\fP{\fI1\fP,\fI2\fP}
304 ELF の動的リンカー/ローダー
305 .TP 
306 \fI/etc/ld.so.cache\fP
307 ライブラリを検索するディレクトリを集めたリストと、 共有ライブラリの候補の整列リストを含むファイル。
308 .TP 
309 \fI/etc/ld.so.preload\fP
310 プログラムの前にロードすべき ELF 共有ライブラリを スペースで区切ったリストが書かれているファイル。
311 .TP 
312 \fBlib*.so*\fP
313 共有ライブラリ
314 .PD
315 .SH 注意
316 \fBld.so\fP の機能は libc のバージョン 4.4.3 以上を用いてコンパイルされた 実行ファイルで使用可能である。 ELF の機能は
317 Linux 1.1.52 以降と libc5 以降で使用可能である。
318 .SH 関連項目
319 .\" .SH AUTHORS
320 .\" ld.so: David Engel, Eric Youngdale, Peter MacDonald, Hongjiu Lu, Linus
321 .\"  Torvalds, Lars Wirzenius and Mitch D'Souza
322 .\" ld-linux.so: Roland McGrath, Ulrich Drepper and others.
323 .\"
324 .\" In the above, (libc5) stands for David Engel's ld.so/ld-linux.so.
325 \fBld\fP(1), \fBldd\fP(1), \fBpldd\fP(1), \fBsprof\fP(1), \fBdlopen\fP(3), \fBgetauxval\fP(3),
326 \fBrtld\-audit\fP(7), \fBldconfig\fP(8), \fBsln\fP(8)
327 .SH この文書について
328 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
329 である。プロジェクトの説明とバグ報告に関する情報は
330 http://www.kernel.org/doc/man\-pages/ に書かれている。