OSDN Git Service

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