Imported upstream version 1.5
[manpages-zh.git] / src / man1 / ld.1
blob0aa2207a3b6b29dbf5adce49fd33d3aa332c6645
1 .\" Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 1999 Free Software Foundation
2 .\" See section COPYING for conditions for redistribution
3 .TH ld 1 "17 August 1992" "cygnus support" "GNU Development Tools"
4 .de BP
5 .sp
6 .ti \-.2i
7 \(**
8 ..
10 .SH NAME
11 ld \- GNU linker (连接器)
13 .SH "总览 (SYNOPSIS)"
14 .hy 0
15 .na
16 .TP
17 .B ld 
18 .RB "[\|" \-o "
19 .I output\c
20 \&\|] \c
21 .I objfile\c
22 \&.\|.\|.
23 .br
24 .RB "[\|" \-A\c
25 .I architecture\c
26 \&\|] 
27 .RB "[\|" "\-b\ "\c
28 .I input-format\c
29 \&\|] 
30 .RB "[\|" \-Bstatic "\|]"  
31 .RB "[\|" \-Bdynamic "\|]"  
32 .RB "[\|" \-Bsymbolic "\|]"  
33 .RB "[\|" "\-c\ "\c
34 .I commandfile\c
35 \&\|] 
36 .RB "[\|" \-\-cref "\|]"
37 .RB "[\|" \-d | \-dc | \-dp\c
38 \|]
39 .br
40 .RB "[\|" "\-defsym\ "\c
41 .I symbol\c
42 \& = \c
43 .I expression\c
44 \&\|]
45 .RB "[\|" \-\-demangle "\|]"
46 .RB "[\|" \-\-no\-demangle "\|]"
47 .RB "[\|" "\-e\ "\c
48 .I entry\c
49 \&\|] 
50 .RB "[\|" \-embedded\-relocs "\|]"
51 .RB "[\|" \-E "\|]" 
52 .RB "[\|" \-export\-dynamic "\|]"
53 .RB "[\|" "\-f\ "\c
54 .I name\c
55 \&\|]
56 .RB "[\|" "\-\-auxiliary\ "\c
57 .I name\c
58 \&\|]
59 .RB "[\|" "\-F\ "\c
60 .I name\c
61 \&\|]
62 .RB "[\|" "\-\-filter\ "\c
63 .I name\c
64 \&\|]
65 .RB "[\|" "\-format\ "\c
66 .I input-format\c
67 \&\|] 
68 .RB "[\|" \-g "\|]" 
69 .RB "[\|" \-G
70 .I size\c
71 \&\|]
72 .RB "[\|" "\-h\ "\c
73 .I name\c
74 \&\|]
75 .RB "[\|" "\-soname\ "\c
76 .I name\c
77 \&\|]
78 .RB "[\|" \-\-help "\|]"
79 .RB "[\|" \-i "\|]"
80 .RB "[\|" \-l\c
81 .I ar\c
82 \&\|] 
83 .RB "[\|" \-L\c
84 .I searchdir\c
85 \&\|] 
86 .RB "[\|" \-M "\|]" 
87 .RB "[\|" \-Map
88 .I mapfile\c
89 \&\|] 
90 .RB "[\|" \-m
91 .I emulation\c
92 \&\|] 
93 .RB "[\|" \-n | \-N "\|]" 
94 .RB "[\|" \-noinhibit-exec "\|]" 
95 .RB "[\|" \-no\-keep\-memory "\|]" 
96 .RB "[\|" \-no\-warn\-mismatch "\|]" 
97 .RB "[\|" \-O\c
98 .I level\c
99 \&\|]
100 .RB "[\|" "\-oformat\ "\c
101 .I output-format\c
102 \&\|] 
103 .RB "[\|" "\-R\ "\c
104 .I filename\c
105 \&\|]
106 .RB "[\|" \-relax "\|]"
107 .RB "[\|" \-r | \-Ur "\|]" 
108 .RB "[\|" "\-rpath\ "\c
109 .I directory\c
110 \&\|]
111 .RB "[\|" "\-rpath\-link\ "\c
112 .I directory\c
113 \&\|]
114 .RB "[\|" \-S "\|]" 
115 .RB "[\|" \-s "\|]" 
116 .RB "[\|" \-shared "\|]" 
117 .RB "[\|" \-sort\-common "\|]" 
118 .RB "[\|" "\-split\-by\-reloc\ "\c
119 .I count\c
120 \&\|]
121 .RB "[\|" \-split\-by\-file "\|]" 
122 .RB "[\|" "\-T\ "\c
123 .I commandfile\c
124 \&\|]  
125 .RB "[\|" "\-Ttext\ "\c
126 .I textorg\c
127 \&\|] 
128 .RB "[\|" "\-Tdata\ "\c
129 .I dataorg\c
130 \&\|] 
131 .RB "[\|" "\-Tbss\ "\c
132 .I bssorg\c
133 \&\|]
134 .RB "[\|" \-t "\|]" 
135 .RB "[\|" "\-u\ "\c
136 .I sym\c
138 .RB "[\|" \-V "\|]"
139 .RB "[\|" \-v "\|]"
140 .RB "[\|" \-\-verbose "\|]"
141 .RB "[\|" \-\-version "\|]"
142 .RB "[\|" \-warn\-common "\|]" 
143 .RB "[\|" \-warn\-constructors "\|]" 
144 .RB "[\|" \-warn\-multiple\-gp "\|]" 
145 .RB "[\|" \-warn\-once "\|]" 
146 .RB "[\|" \-warn\-section\-align "\|]" 
147 .RB "[\|" \-\-whole\-archive "\|]" 
148 .RB "[\|" \-\-no\-whole\-archive "\|]" 
149 .RB "[\|" "\-\-wrap\ "\c
150 .I symbol\c
151 \&\|]
152 .RB "[\|" \-X "\|]" 
153 .RB "[\|" \-x "\|]" 
154 .ad b
155 .hy 1
156 .SH "描述 (DESCRIPTION)"
158 .B ld\c
159 \& 合并 一组 目标文件(object) 和 库文件(archive), 重定位 数据部分,
160 构建 符号引用(symbol reference). 一般说来, 编译 生成 可执行文件 的 
161 最后步骤 就是 调用 \c
162 .B ld\c
166 .B ld\c
167 \& 可以读取 用 连接器命令语言(Linker Command Language) 编写的 脚本文件, 
168 它 能够 对 连接过程 提供 精确 和 全面 的 控制.
169 本 手册页 不讨论 命令语言; 可参看 `\|\c
170 .B info\c
171 \|' 的 `\|\c
172 .B ld\c
173 \|' 项, 或者 手册
175 ld: the GNU linker
176 \&, 里面有 命令语言 的 细节 和 其他 GNU linker 的 内容.
178 这个版本 的 \c
179 .B ld\c
180 \& 使用 通用BFD库 操作 目标文件, \c
181 .B ld\c
182 \& 能够 以 多种格式 读入, 连接 和 输出 目标文件 \(em\&例如 COFF 或 \c
183 .B a.out\c
184 \&, 能够 把 不同的格式 连接 在一起, 产生 各种 有效 的 目标文件.
185 用 `\|\c
186 .B objdump \-i\c
187 \|' 可以 列出 各种 体系结构 支持 的 格式 列表; 另见
188 .BR objdump ( 1 ).
190 GNU linker 不仅 灵活 强大, 还能够 比 其他 linker 提供 更多 的 诊断信息.
191 很多 linker 只要 碰上 一个错误 就 立刻停止 执行; 而
193 .B ld\c
194 \& 一有可能 仍然 继续执行, 这样 容易 定位出 其他错误
195 (某些情况下, 尽管出了错, 仍然 生成 输出文件).
197 GNU linker \c
198 .B ld\c
199 \& 期望 实现 更广泛 的 适用范围, 尽可能 兼容 其他 linker.
200 通过 命令行 和 环境变量, 用户 可以 用 ld 执行 多种 操作.
202 .SH "选项 (OPTIONS)"
203 过于丰富的 命令行选项 使人 感到 压抑, 好在 实际使用 中, 多数情况下
204 只需要 掌握 其中 一小部分. 例如, 在 一个 标准的, 提供 相应支持 的 Unix 
205 系统 中, 常常 用 \c
206 .B ld\c
207 \& 连接 标准的 Unix 目标文件. 如果要 连接 \c
208 .B hello.o\c
212 $\ ld\ \-o\ output\ /lib/crt0.o\ hello.o\ \-lc
215 它 告诉 \c
216 .B ld\c
217 \& 生成 一个 叫做 \c
218 .B output\c
219 \& 的 文件 , 其中 连接了 文件 \c
220 .B /lib/crt0.o\c
221 \& 和 \c
222 .B hello.o\c
223 \& 以及
224 库文件 \c
225 .B libc.a\c
226 \& (在 标准搜索目录下).
229 .B ld\c
230 \& 的 命令行选项 可以 任意顺序 出现, 甚至 重复出现. 多数 情况 下, 
231 如果 用 不同的 参数 重复 同一种 选项, ld 不会 出现 更多的变化, 也不会 
232 覆盖 以前的 参数. (指 命令行 中 左边的参数)
234 例外情况 \(em\& 某些选项 有 反复使用 的 需要 \(em\& 如
236 .B \-A\c
237 \&, \c
238 .B \-b\c
239 \& (或等同的 \c
240 .B \-format\c
241 \&), \c
242 .B \-defsym\c
245 .B \-L\c
246 \&, \c
247 .B \-l\c
248 \&, \c
249 .B \-R\c
250 \&, 和 \c
251 .B \-u\c
254 待连接的 目标文件 列表, 即 总览中的 \c
255 .I objfile\c
257 可以 放在 命令行选项 的 前面, 后面, 或者 混杂其中; 但是 不能 把 \c
258 .I objfile\c
259 \& 放置于 某个 选项开关 和 它的参数 中间.
261 一般说来 linker 要求 至少 输入 一个 目标文件, 但是 可以 用 \c
262 .B \-l\c
265 .B \-R\c
266 \& 输入 其他格式 的 二进制文件, 或者 用 命令语言 编写的 脚本文件. 如果 \c
267 .I 没有\c
268 \& 指定 二进制格式 的 输入文件, linker 就不能 产生 输出文件, 而是 显示
269 `\|\c
270 .B No input files\c
271 \|'.
273 选项的参数 必须 出现在 代表 选项 的 字母 后面, 可以有 空白符, 也可以 没有.
276 .BI "-A" "architecture"
277 在 目前版本 的 \c
278 .B ld\c
279 \& 中, 这个 选项 仅适用于 Intel 960 体系系列. 在 \c
280 .B ld\c
281 \& 的 设置 中, \c
282 .I architecture\c
283 \& 参数 是 960 系列 的 成员 识别名称 之一, 由 两个字母 组成;
284 这个选项 指出 期望的 输出目标, 对 输入文件 的 不兼容指令 作出 警告.
285 它 能够 改变 linker 对 库文件 的 搜索策略, 以便于 支持 体系相关库, 方法是
286 把 体系识别名称 添加在 待搜索 的 文件名 尾部.
288 例如, 如果 \c
289 .B ld\c
290 \& 命令行 有 `\|\c
291 .B \-ACA\c
292 \|' 和 `\|\c
293 .B \-ltry\c
294 \|', linker 将 搜索 (根据 内置的路径 和 \c
295 .B \-L\c
296 \& 指定的路径) 以下 名称 的 库文件
301 libtry.a
303 tryca
305 libtryca.a
309 前两项 是 常规做法; 后两项 源于 `\|\c
310 .B \-ACA\c
311 \|'.
313 将来发布的 \c
314 .B ld\c
315 \& 可能 对 其他 体系结构 提供 类似功能.
317 可以 在 命令行上 使用 多个 \c
318 .B \-A\c
319 \& 选项, 只要 该 体系 允许 和 目标体系 相连, 其选项 使 ld 在 搜索 \c
320 .B \-l
321 指定的库 中, 增加 和 体系结构名称 对应的库.
324 .BI "\-b " "input-format"
325 指定 输入目标文件 的 二进制格式, 目标文件 在 命令行 上 给出, 放在
326 这个选项 的 后面. 一般 不需要 指定 这个选项, \c
327 .B ld\c
328 \& 的 缺省输入格式 配置为 各个机器 上 最常用 的 格式. \c
329 .I input-format\c
330 \& 是 字符串, BFD 库 支持的 格式 名称. 选项 \c
331 .B \-format \c
332 .I input-format\c
333 \&\c
334 \& 起 相同的 作用, 脚本命令
335 .BR TARGET 
336 也是 一样.
338 连接 某些 不寻常的 二进制文件 时 需要 这个选项. 或者 使用 \c
339 .B \-b\c
340 \& 选项 强调 格式切换 (连接 不同格式 的 目标文件),
341 比如说, 在 每组 特定格式 的 目标文件 前面 使用 \c
342 .B \-b \c
343 .I input-format\c
344 \&\c
345 \& 选项.
347 环境变量
348 .B GNUTARGET\c
349 \& 用于 指定 缺省格式. 也可以 在 脚本文件 中 用 \c
350 .B TARGET\c
351 \& 命令 定义 输入格式.
354 .B \-Bstatic 
355 禁止 连接 共享库. 这个选项 只在 支持 共享库 的 平台 上 有意义.
358 .B \-Bdynamic
359 连接 动态库. 这个选项 只在 支持 共享库 的 平台 上 有意义, 一般说来 它
360 是 缺省选项.
363 .B \-Bsymbolic
364 当 创建 共享库 的 时候, 只要 有可能, 在 共享库 内 编联(bind reference) 
365 全局符号 和 定义(definition). 一般说来, 允许 连接了 某个 共享库 的 程序
366 覆盖 共享库内 的 定义. 这个选项 只在 支持 共享库 的 ELF 平台 上 有意义.
369 .BI "\-c " "commandfile"
370 告诉 \c
371 .B ld\c
372 \& 从 文件
374 .I commandfile\c
375 \& 中 读取 连接 命令. 这些 命令 彻底的 覆盖 \c
376 .B ld\c
377 \& 的 缺省 连接 格式 (而不是 添加); \c
378 .I commandfile\c
379 \& 必须 详尽的 描述 目标格式 的 所有细节.
381 你 也可以 在 命令行 上 直接嵌入 连接命令, 把 脚本 嵌在 大括弧 `\|\c
382 .B {\c
383 \|' 和 `\|\c
384 .B }\c
385 \|' 中间.
388 .B \-\-cref
389 输出 交叉引用表(cross reference).  如果 创建了 连接映像(linker map) 文件,
390 交叉引用表 就 输出到 映像文件 中, 否则 送往 标准输出.
393 .B \-d 
395 .B \-dc
397 .B \-dp
398 这 三个选项 是 一回事, 为了 兼容 其他 linker 而 同时提供. 
399 即使 已经 指定 \c
400 .B ld
401 生成 可重定位文件 (\c
402 .B \-r\c
403 \&), 它们 能为 公共符号(common symbol) 分配 空间.  脚本命令
405 .B FORCE_COMMON_ALLOCATION\c
406 \& 起 同样作用.
409 .BI "-defsym " "symbol" "\fR = \fP" expression
410 在 输出文件 中 创建 一个 全局符号, 它 含有 \c
411 .I expression\c
412 \& 给出的 绝对地址. 可以 在 命令行 使用 多个 这样的 选项. 这个 \c
413 .I expression\c
414 \& 只能 使用 有限的 数学形式: 十六进制常数, 已经存在 的 符号名字.
415 或者 使用 \c
416 .B +\c
417 \& 和 \c
418 .B \-\c
419 \& 加减 十六进制常数 或 符号. 如果 需要 更复杂的 表达式, 考虑 使用
420 命令语言脚本.
423 .B \-\-demangle
425 .B \-\-no\-demangle
426 这些选项 控制 是否在 出错信息 和 其他信息 中, 输出 可读的(demangle) 
427 符号名称. 如果 使用了 demangle 选项, linker 尽量使 符号名称 容易理解: 
428 去掉 领头的 下划线 (如果 被 目标文件格式 采用); 把 C++ 难懂的 符号名称
429 (symbol name) 转换成 可读的 名称. 缺省情况下 linker 输出 可读的 符号名称, 
430 除非 设置了 环境变量
431 .B COLLECT_NO_DEMANGLE .
432 这些选项 能够 覆盖 缺省行为.
435 .BI "-e " "entry"
436 使用 \c
437 .I entry (入口)\c
438 \& 标识符 作为 程序 执行 的 开始端, 而不是 缺省入口. 关于 缺省入口 和 其他
439 设置 入口 的 方法 参见 `\|\c
440 .B info\c
441 \|' 的
442 .B ld\c
443 \|' 项.
446 .B \-embedded\-relocs
447 这个选项 仅用于 连接 MIPS上 嵌入的 PIC 代码, GNU 的 编译器 和 汇编器 用
448 .B \-membedded\-pic
449 选项 能够 生成 这种代码. 它使 linker 创建 一张 表格, 用于 在 运行的时候,
450 重定位 任何 被 静态初始化 为 指针值 的 数据. 详见 testsuite/ld-empic 的 代码.
453 .B \-E
455 .B \-export\-dynamic
456 当 创建 ELF 文件 时, 把 所有 符号 加入 动态符号表.
457 一般说来, 动态符号表 只包含 动态目标库(dynamic object) 需要的 符号. 用
458 .I dlopen
459 的 时候 需要 这个 选项.
462 .BI "-f " "name"
464 .BI "--auxiliary " "name"
465 创建 ELF 共享目标库 时, 把 内部的 DT_AUXILIARY 字段 设置为 
466 .I name.
467 它 告诉 动态linker, 把 该 共享目标库 的 符号表 用做 共享目标 
468 .I name 
469 的 符号表 的 辅助过滤器.
472 .BI "-F " "name"
474 .BI "--filter " "name"
475 创建 ELF 共享目标库 时, 把 内部的 DT_FILTER 字段 设置为 
476 .I name.
477 它 告诉 动态linker, 把 该 共享目标库 的 符号表 用做 共享目标 
478 .I name 
479 的 符号表 的 辅助过滤器.
482 .BI "\-format " "input\-format"
483 等同于 \c
484 .B \-b\c
485 \& \c
486 .I input\-format\c
490 .B \-g
491 虚设项; 用于 兼容 其他 工具.
494 .BI "\-G " "size"\c
495 把 使用 GP 寄存器 优化的 目标(文件) 大小 限制为
496 .I size .
497 用于 MIPS ECOFF, 对 其他 目标文件格式 无效.
500 .BI "-h " "name"
502 .BI "-soname " "name"
503 创建 ELF 共享目标库 时, 把 内部的 DT_SONAME 字段 设置为 name. 
504 如果 某个 可执行文件 连接了 含有 DT_SONAME 字段 的 共享目标库, 
505 当 该程序 运行 时, 动态 linker 试图 根据 DT_SONAME 字段 调入 共享的 
506 目标库, 而 不使用 提供给 linker 的 文件名.
509 .B \-\-help
510 在 标准输出 显示 命令行选项 的 摘要, 然后 结束. 这个选项 和
511 .B \-\-version
512 选项 使用了 两个 短横线, 不是 一个, 目的是 兼容 其他 GNU 程序.
513 只用 一个 短横线 的 选项 是为了 兼容 其他 linker.
516 .B \-i
517 执行 增量连接(incremental link), 等同于 \c
518 .B \-r\c
519 \& 选项.
522 .BI "\-l" "ar"
523 在 连接文件 列表 中 增加 归档库文件 \c
524 .I ar\c
525 \&.  可以 多次 使用 这个选项. 凡指定 一项 \c
526 .I ar
527 \&, \c
528 .B ld\c
529 \& 就会 在 路径列表 中 增加 一项 对 \c
530 .B lib\c
531 .I ar\c
532 \&.a\c
533 \& 的 搜索.
536 .BI "\-L" "searchdir"
537 这个选项 将 路径 \c
538 .I searchdir\c
539 \& 添加 到 路径列表 中去, \c
540 .B ld\c
541 \& 在 这个 列表 中 搜索 归档库. 可以 多次 使用 这个选项.
543 缺省的 搜索路径集 (不使用 \c
544 .B \-L\c
545 \& 时) 取决于 \c
546 .B ld\c
547 \& 使用的 模拟模式(emulation) 及其 配置.
548 在 连接脚本 中, 可以 用 \c
549 .B SEARCH_DIR
550 命令 指定 路径.
553 .B \-M 
554 在 标准输出 显示  连接映像 \(em\& 有关 \c
555 .B ld\c
556 \& 把 符号 映射到 何处 的 诊断信息, 以及 全局公共存储器 的 分配 信息.
559 .BI "\-Map " "mapfile"\c
560 把 连接映像 输出到 
561 .I mapfile
562 文件 中 \(em\& 有关 \c
563 .B ld\c
564 \& 把 符号 映射到 何处 的 诊断信息, 以及 全局公共存储器 的 分配 信息.
567 .BI "\-m " "emulation"\c
568 模仿
569 .I emulation
570 连接器.  可以 用
571 .I \-\-verbose
573 .I \-V
574 选项 列出 有效的 模拟项.  这个选项 覆盖 编译 进去 的 缺省项.
577 .B \-N 
578 指定 可读写 的 \c
579 .B 正文\c
580 \& 和 \c
581 .B 数据\c
582 \& 节(section). 如果 输出格式 支持 Unix 风格的 幻数(magic number), 
583 则 输出文件 标记为 \c
584 .B OMAGIC\c
587 当 使用 `\|\c
588 .B \-N\c
589 \&\|' 选项 时, linker 不做 数据段 的 页对齐(page-align).
592 .B \-n 
593 设置 正文段 为 只读, 如果 有可能, \c
594 .B NMAGIC\c
595 \& 为 可写.
598 .B \-noinhibit\-exec
599 一般说来, 如果 连接的 时候 发生 错误, linker 不会 产生 输出文件.
600 使用了 这个 标志选项, 只要 不出 致命差错, 仍能够 产生 输出文件.
603 .B \-no\-keep\-memory
604 linker 通常 牺牲 内存, 优化 速度, 它 把 输入文件 的 符号表 缓冲在 内存中.
605 这个选项 使 linker 必要时 重复读取 符号表, 以便 优化 内存使用. 连接 大型 
606 可执行文件 的 时候, linker 有可能 内存 不够, 此时 可以 试试 这个选项.
609 .B \-no\-warn\-mismatch
610 一般情况下, 如果 试图 连接 某些 不匹配 的 输入文件, 比如说, 按 不同
611 处理器 编译 的, 或者 具有 不同的 字节顺序(endianness), linker 就会 报错.
612 这个选项 告诉 linker 默许 这种 错误. 要 小心使用 这个选项, 除非 你
613 正在做 某些 特殊 操作, 而且 能够 确定 不需要 linker 报错.
616 .BI "\-o " "output"
617 .I output\c
618 \& 用来 指定 \c
619 .B ld\c
620 \& 生成的 程序名; 如果 没有 使用 这个选项, 缺省名字 是 `\|\c
621 .B a.out\c
622 \|'.  脚本命令 \c
623 .B OUTPUT\c
624 \& 起 同样 作用.
627 .BI "\-O" "level"
628 生成 优化的 输出文件. 这个选项 占用 比较多 的 时间, 因此 仅 常用于
629 最终文件 的 生成.
631 .I level\c
632 \& 是 数值参数. 任何 大于零 的 参数 意味着 要求 优化.
635 .BI "\-oformat " "output\-format"
636 指定 输出目标文件 的 二进制格式. 一般 不需要 指定 这个选项, \c
637 .B ld\c
638 \& 的 缺省 输出格式 配置为 各个机器 上 最常用 的 格式. \c
639 .I output-format\c
640 \& 是 一个 字符串, BFD 库 支持的 格式 名称. 脚本命令
641 .B OUTPUT_FORMAT
642 也可以 指定 输出格式, 但是 这个选项 能够 覆盖 掉 它.
645 .BI "\-R " "filename"
646 从 文件 \c
647 .I filename\c
648 \& 中 读取 符号名称 及其 地址, 但是 不做 重定位, 不传送到 输出端.
649 它 可以 使 输出文件 符号引用 其他程序中 定义的 绝对地址.
652 .B \-relax
653 这个选项 的 效果 取决于 机器, 目前 只支持 H8/300.
655 在 某些 平台 上 可以 使用 这个选项 做 全局优化, 它 让 linker 解决 程序中
656 的 地址处理, 例如 在 输出目标文件 中 缓和(relax) 地址模式 以及 合成
657 (synthesize) 新指令.
659 其他平台 也接受 `\|\c
660 .B \-relax\c
661 \&\|' 选项, 但是 不起作用.
664 .B \-r 
665 生成 可重定位 输出 \(em\& 就是说, 生成的 输出文件 能够 依次 成为 \c
666 .B ld\c
667 \& 的 输入, 一般 称之为 \c
668 .I 不完全(partial)
669 连接\c
670 \&. 它 有 一个 副效应, 在 支持 标准 Unix 幻数(magic number) 的 环境 中,
671 这个选项 把 输出文件 的 幻数 设置成 \c
672 .B OMAGIC\c
673 \&. 如果 没有 指定 这个选项, linker 生成 绝对定位 的 文件.
674 连接 C++ 程序时, 这个选项 \c
675 .I 不会 \c
676 \& 解析 出 对 构造子(constructor) 的 引用(reference); 不妨 改用 \c
677 .B \-Ur\c
678 \& 选项. 
680 这个选项 的 效果 和 \c
681 .B \-i\c
682 \& 一样.
685 .B \-rpath\ \fIdirectory
686 增加 一条 对 运行时(runtime)库 的 搜索路径. 这个选项 用于 连接 ELF 可执行
687 文件 和 共享目标库. 所有
688 .B \-rpath
689 选项 的 参数 被 合并, 然后 一起 传递 给 运行时 linker, 运行时 linker 在
690 运行 的 时候 使用 这些 路径 寻找 共享目标库.
691 .B \-rpath
692 也可以 用来 定位 共享目标库 引用的 共享目标库; 参见 对
693 .B \-rpath\-link
694 选项 的 叙述.  如果 连接 ELF 可执行文件 时 没有 指定
695 .B \-rpath
696 选项, linker 就使用 环境变量
697 .B LD_RUN_PATH
698 的 内容 \(em\& 只要 这个 环境变量 存在.
700 .B \-rpath
701 选项 能够 用在 SunOS 上, 缺省状况下, linker 可以 根据 给出的
702 .B \-L
703 选项 形成 运行时 搜索路径.  如果 使用了
704 .B \-rpath
705 选项, 运行时 搜索路径 从
706 .B \-rpath
707 中 产生, 而 忽略
708 .B \-L
709 选项.  这一点 有利于 使用 gcc, 在 NFS 文件系统 上, gcc 可能 产生 许多
710 .B \-L
711 选项.
714 .B \-rpath\-link\ \fIdirectory
715 使用 ELF 或 SunOS 的 时候, 某些 共享库 可能 需要 其他 共享库. 
716 这种情况 一般 发生在 某个
717 .B ld\ \-shared
718 连接 中, 输入文件 包含了 共享库.
720 如果 linker 遇到 这样的 依赖情况, 当 它 执行 非共享, 不可重定位 的 连接
721 时, linker 将 自动 寻找 所需的 共享库, 如果 它们 没有 被 显明 包含, 就
722 把 它们 包含到 连接 中. 在 这种情况下,
723 .B \-rpath\-link
724 选项 指定了 最先 搜索 的 目录集.
725 .B \-rpath\-link
726 能够 指定 一批 目录, 目录 用 冒号 隔开. 也可以 用 这些 目录名 作为 参数,
727 重复 使用 这个 选项.
729 如果 没有 找到 需要的 共享库, linker 产生 一个 警告, 但是 继续 连接.
732 .B \-S 
733 去掉 输出文件 中的 调试符号信息 (但不是 所有符号).
736 .B \-s 
737 去掉 输出文件 中的 全部 符号信息.
740 .B \-shared
741 创建 一个 共享库. 目前 只支持 ELF 和 SunOS 平台 (在 SunOS 上, 这个选项 不是
742 必须的, 如果 没有 使用
743 .B \-e
744 选项, 而且 存在 不确定 的 符号, linker 将 自动 创建 共享库).
747 .B \-sort\-common
748 .B ld
749 通常 把 全局公共符号 放到 适当的 输出节, 按照 大小 排序.
750 首先是 单字节符号, 然后是 双字节, 接下来是 四字节, 随后是 其他的.
751 它的 目的是 防止 符号间 因为 排布限制 出现 间隙. 
752 使用 这个选项 可以 禁止 排序.
755 .B \-split\-by\-reloc\ \fIcount
756 在 输出文件 中 创建 附加节(extra section), 使得 输出文件 中, 
757 没有 某一个 输出节 包含 大于
758 .I count
759 个 重定位项. 它 用于 产生 大型 可重定位 COFF 目标文件, 可以 插入到
760 某些 实时内核 中; 因为 COFF 不能 在 单一节内 存放 65535 以上的 重定位项.
761 注意, 有些 目标文件格式 不支持 任意 分节, 此时 这个选项 将会 操作 失败.
762 此外, linker 不能够 分割 输入节, 然后 重新分配, 因此 如果 某个 输入节 包含
763 .I count
764 以上的 重定位项, 相应的 输出节 将 包含 同样多的 重定位项.
767 .B \-split\-by\-file
768 类似于
769 .B \-split\-by\-reloc ,
770 但是 它为 每个 输入文件 建立一个 新的 输出节.
773 .BI "\-Tbss " "org"\c
775 .BI "\-Tdata " "org"\c
777 .BI "\-Ttext " "org"\c
778 把 \c
779 .I org\c
780 \& 作为 输出文件 的 段 起始地址 \(em\& 特别是 \(em\& \c
781 .B bss\c
782 \&, \c
783 .B data\c
784 \&, 或 \c
785 .B text\c
786 \& 段.
788 .I org\c
789 \& 必须是 十六进制整数.
792 .BI "\-T " "commandfile"
793 等同于 \c
794 .B \-c \c
795 .I commandfile\c
796 \&\c
797 \&; 用于 兼容 其他工具.  
800 .B \-t 
801 在 \c
802 .B ld\c
803 \& 处理 输入文件 的 时候 显示 文件名.
806 .BI "\-u " "sym"
807 把 \c
808 .I sym\c
809 \& 作为 未定义(undefined) 的 符号 送入 输出文件.
810 这样做 可以, 例如, 促使 linker 从 标准库 连接 某个 附加的模块. 
811 允许 使用 多个 \c
812 .B \-u\c
813 \& 选项 输入 多个 未定义 符号.
816 .B \-Ur 
817 对于 除 C++ 以外的 任何 程序, 这个选项 等同于
819 .B \-r\c
820 \&: 生成 可重定位 的 输出 \(em\& 就是说, 能够 依次 输入 \c
821 .B ld\c
822 \& 的 输出文件. 连接 C++ 程序 的 时候, \c
823 .B \-Ur
824 .I 将\c
825 \& 解析 对 构造子(constructor) 的 引用(reference), 这一点 和 \c
826 .B \-r\c
827 \& 不同.
830 .B \-\-verbose
831 显示 \c
832 .B ld
833 的 版本号, 列出 支持的 模拟项(emulation). 显示 哪些 输入文件 能够 打开, 
834 哪些 不能,
837 .B \-v, \-V
838 显示 \c
839 .B ld\c
840 \& 的 版本号.
841 此外
842 .B \-V
843 选项 能够 列出 支持的 模拟项.
846 .B \-\-version
847 显示 \c
848 .B ld
849 的 版本号 然后 结束.
852 .B \-warn\-common
853 当 公共符号 和 其他 公共符号 合并 时, 或者 和 某个 符号定义 合并 时,
854 linker 就发出 警告. Unix 系统的 linker 允许 这种 有些 草率 的 做法, 其他
855 操作系统 则 不行. 这个选项 帮助你 在 合并 全局符号 的 时候 发现 潜在问题.
858 .B \-warn\-constructors
859 如果 使用了 全局构造子(global constructor), linker 就发出 警告.
860 它 只对 某些 目标文件结构 有用, 对于 如 COFF 或 ELF, 此 linker 不能够
861 检测 全局构造子 的 使用情况.
864 .B \-warn\-multiple\-gp
865 如果 输出文件 需要 多个 全局指针值, linker 就发出 警告. 这个选项 只能
866 用于 某些 处理器, 如 Alpha.
869 .B \-warn\-once
870 对 每个 未定义符号 只 警告 一次, 而不是 每次 引用 这个符号 都 警告.
873 .B \-warn\-section\-align
874 如果 某个 输出节(section) 的 地址 因为 边界对齐 而 发生 改变,
875 linker 就发出 警告. 典型情况下 由 输入节 设置 边界, 只有 不做 明确指定
876 的 时候 地址 才会 改变; 就是说, SECTIONS 命令 没有 指出 该节 的 开始地址.
879 .B \-\-whole\-archive
880 对于 命令行 上
881 .B \-\-whole\-archive
882 选项 提到的 每个 归档库, 连接时 连入 归档库 的 全部 目标文件, 而不是
883 在 归档库 中 搜索 所需的 目标文件. 一般用于 把 归档库文件 转变成 共享库文件,
884 迫使 全部 目标文件 进入 共享库.
887 .B \-\-no\-whole\-archive
888 关闭
889 .B \-\-whole\-archive
890 选项 对 归档库 的 影响.
893 .BI "--wrap " "symbol"
895 .I symbol
896 使用 包装函数(wrapper function). 任何 对
897 .I symbol
898 未定义 的 引用 (undefined reference) 将 解析为
899 .BI "__wrap_" "symbol".
900 任何 对
901 .BI "__real_" "symbol"
902 未定义 的 引用 将 解析为
903 .I symbol.
906 .B \-X 
907 删除 全部 临时的 局部符号. 大多数 目的文件 中, 这些 局部符号 的 名字 用 `\|\c
908 .B L\c
909 \|' 做 开头.
912 .B \-x
913 删除 全部 局部符号.
917 .SH "环境 (ENVIRONMENT)"
919 通过 环境变量 \c
920 .B GNUTARGET\c
921 \& 可以 改变 
922 .B ld\c
923 \& 的 行为.
926 如果 没有 使用 \c
927 .B \-b\c
928 \& 选项 (或 相同的 \c
929 .B \-format\c
930 \&),
931 .B GNUTARGET\c
932 \& 决定了 输入文件 的 目标格式, 其值 应为 BFD的 名称之一.  如果 没有 \c
933 .B GNUTARGET \c
934 \& 环境变量, \c
935 .B ld\c
936 \& 就使用 主机的 本地格式. 如果 \c
937 .B GNUTARGET\c
938 \& 设置为 \c
939 .B default\c
940 \&, BFD 通过 检查 输入文件 的 二进制格式 判断 输入格式;
941 这个方法 通常 有效, 但 隐含 歧义, 这是因为 没有 办法 保证 标志 目标文件格式
942 的 幻数 是 唯一的.
943 不过, 各个系统 配置 BFD 的 时候, 会把 系统 约定的格式 放在 搜索列表 的
944 前面, 因此 能够 按照 约定 消除 歧义.
948 .SH "另见 (SEE ALSO)"
950 .BR objdump ( 1 )
952 .RB "`\|" ld "\|' 和 `\|" binutils "\|'"
953 项 (
954 .B info\c
957 .I 
958 ld: the GNU linker\c
959 , Steve Chamberlain and Roland Pesch;
961 The GNU Binary Utilities\c
962 , Roland H. Pesch.
964 .SH COPYING
965 Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
967 Permission is granted to make and distribute verbatim copies of
968 this manual provided the copyright notice and this permission notice
969 are preserved on all copies.
971 Permission is granted to copy and distribute modified versions of this
972 manual under the conditions for verbatim copying, provided that the
973 entire resulting derived work is distributed under the terms of a
974 permission notice identical to this one.
976 Permission is granted to copy and distribute translations of this
977 manual into another language, under the above conditions for modified
978 versions, except that this permission notice may be included in
979 translations approved by the Free Software Foundation instead of in
980 the original English.
983 .SH "[中文版维护人]"
984 .B 徐明 <xuming@users.sourceforge.net>
985 .SH "[中文版最新更新]"
986 .BR 2003/05/13
987 第一版
988 .SH "《中国Linux论坛man手册页翻译计划》"
989 .BI http://cmpp.linuxforum.net