ld 命令
用途
链接对象文件。
语法
ld [ -D Number ] [ -e Label ] [ -G ] [ -H Number ] [ -K ] [ -m ] [ -M ] [ -o Name ] [ -r ] [ -s ] [ -S Number ] [ -T Number ] [ -u Name ] ... [ -v ] [ -V ] [ -z ] [ -Z String ] ... [ -b Option ] ... [ -L Directory ] ... { -f FileID ... -l Name ... InputFile ... }
或ld -bsvr4 [ -d[y | n] ] [ -D Number ] [ -e Label ] [ -G ] [ -H Number ] [ -K ] [ -m ] [ -M ] [ -o Name ] [ -r ] [ -R Path ] [ -s ] [ -S Number ] [ -T Number ] [ -u Name ] ... [ -v ] [ -V ] [ -z [ defs | nodefs ] ] [ -z multidefs ] [ -z [text | nowarntext | warntext ] ] ] [ -Z String ] ... [ -b Option ] ... [ -L Directory ] ... { -f FileID ... -l Name ... InputFile ... }
描述
ld 命令也称为链接编辑器或装订器,可将对象文件、归档文件和导入文件合并为一个输出对象文件,并解决外部引用问题。 ld 命令会生成一个可运行的可执行对象文件。 此外,如果指定的 ld 命令没有 -s 标志,可以将输出文件作为 InputFile 参数调用另一个 ld 命令。 默认情况下, ld 命令会创建并将其输出放到 a.out 文件中。
ld 命令可以在不列出所有输入对象文件的情况下重新链接程序。 例如,如果大型程序中的一个对象文件发生变化,你可以通过在命令行中列出新的对象文件和旧的程序,以及程序所需的任何共享库,重新链接程序。 更多信息,请参阅示例。
ld 命令按您在命令行上指定的顺序链接输入文件。 如果不止一次指定文件,仅处理第一次出现的文件。 指定至少一个输入文件,可以使用 -bI, -bimport, -bkeepfile, -f, 或 -l 标志,也可以作为一个 InputFile 参数。 -bI、 -bimport 或 -bkeepfile 标志是与 I、 import 或 keepfile 选项一起使用的 -b 标志。
当生成在操作系统下运行的程序时,可以使用 cc 命令链接文件。 因为 cc 命令用公共选项和必备支持库调用 ld 命令,所以可以不在命令行中指定。 (从 /etc/xlC.cfg或 /etc/vac.cfg 配置文件中读取此信息。)
- 链接方式
ld 命令可以链接 32 位对象和程序以及 64 位对象和程序,但 32 位和 64 位对象可能无法链接在一起。 要指定链接方式,可以使用 OBJECT_MODE 环境变量或 -b32 或 -b64 选项。
- 归档文件
归档文件是复合对象,它通常包含共享文件和对象文件,其中包括了共享对象。 如果归档文件包含另一个归档文件或不能识别类型的成员,ld 命令发出一个警告并忽略不能识别的成员。 如果归档文件中包含的对象文件在 XCOFF 头中设置了 F_LOADONLY 位,那么 ld 命令将忽略该成员。 此位用于指定保留在归档文件中的共享对象的旧版本,以允许现有应用程序装入和运行。 新应用程序与共享对象的新版本,既归档的另一个成员,进行链接。
- 共享对象
通过调用另一条 "ld命令创建的共享对象是一个在 XCOFF 头中设置了F_SHROBJ位的对象文件。 共享对象定义了在运行时解析的外部符号。 如果指定了 "-bnso或 "-bnoautoimp选项,"ld命令会将共享对象作为普通对象文件处理,如果文件被剥离,链接就会失败。
通常,仅当引用了共享对象中的符号时,才会在输出文件的装入程序部分中列出用作输入的共享对象。 不过,在使用运行时链接器时,即使没有引用符号,也可能希望列出共享对象。 使用 -brtl 选项时,输出文件中会列出命令行中列出的所有共享对象,这些对象都不是存档成员。 程序运行时,系统加载器会加载所有此类共享对象,而共享对象导出的符号可能会被运行时链接器使用。 要自动加载作为存档成员的共享对象,必须通过存档中的导入文件启用自动加载。 要启用自动加载,请参阅导入和导出文件格式(-bI:和-bE:标志)。
- 导入和导出文件
导入文件是标识运行时要解析的外部符号的 ASCII 文件。 导入文件标识了定义导入符号的共享对象。 系统在运行时装入程序查找和解析符号。 如果导入文件的第一行以 #! (#,感叹号) 开头,那么可以在命令行上将该文件指定为普通 InputFile。 否则,必须使用 -bI 或 -bimport 选项来指定导入文件。
导出文件是识别其他要导入的可执行对象可用的外部符号的 ASCII 文件。 导出文件格式与导入文件格式一样。
- 库
- 正在处理
ld 命令以相同方式处理所有输入文件,不管是不是归档。 它包含所有对象的符号表,并废弃重复现有符号的符号定义。 与某些其他版本的 ld 命令不同,您不需要对归档文件进行排序,因此引用在定义之前。 不要在命令行中多次列出存档文件。
ld 命令标志的顺序不影响如何处理,除非标志和输入对象文件、库和导入文件配合使用。 这些标志是 -L, -f, -l, -bkeepfile 和 -bI。 标志以下列顺序处理:
- -L 标志会在搜索目录列表中添加一个目录,以查找 -l 标志指定的库。 按指定的顺序搜索目录。 在处理 -l 标志之前,先处理所有 -L 标志。
- ld 命令按指定顺序处理 InputFile 参数、 -f 标志指定的文件和 -l 标志指定的库。
- ld 命令处理 -bI 标志指定的导入文件,处理顺序在处理所有其他对象文件和库之后。 如果需要在处理某些对象文件之前先处理导入文件,则可以指定导入文件为输入文件,而不使用 -bI 标志。 在这种情况下,导入文件的第一行必须以 #、感叹号 (
#!) 符号开头,导入文件将与其他输入文件一起按照步骤 2 进行处理。 - -bkeepfile 选项命名一个 ld 命令不在其上执行垃圾收集的输入文件。 如果指定的输入文件作为 InputFile 参数或被列入 -f 标志指定的文件中,则 -bkeepfile 选项不会影响文件处理的顺序。 否则,文件和其他输入文件一起按第 2 步描述的顺序处理。
ld 命令生成的输出文件已设置了执行权限,除非指定了 -r 标志或 -bnox 选项,或在链接时报告了错误。 如果出现任何严重错误,或者输出文件被指定为输入文件且出现任何错误,则不会覆盖现有的输出文件。
- 符号
ld 命令使用以下预定义符号来提供特殊地址位置,并且可以在 C 语法中声明为
extern char name[ ]。 下表描述了符号名称:项 描述 _text指定程序的第一个位置。 _etext指定程序后的第一个位置。 _data指定数据的第一个位置。 _edata指定初始化数据后的第一个位置。 _end或end指定所有数据后的第一个位置。 使用符号的唯一方式是取用它的地址。 如果输入文件重新定义其中任何符号,那么可能会产生不可预测的结果。 编译器使用额外的预定义符号
_ptrgl来实现使用函数指针的调用。- 垃圾回收
缺省情况下,当生成输出文件时 ld 命令执行垃圾收集,删除不被引用的控制部分(CSECT)。
CSECT 是不可分的代码或数据单元。 如果包含有关于其他 CSECT 中符号的重定位项(RLD),此 CSECT 将引用其他 CSECT。 引用的 CSECT 导致它引用的所有 CSECT 也被引用。 此外,如果 CSECT 包含导出的符号,使用 -u 标志指定的符号或使用 -e 标志指定为入口点的符号,那么将引用该 CSECT。
如果未引用符号但在输出文件中需要该符号,那么可以导出该符号,使用 -u 标志指定该符号或禁止垃圾回收。 要抑制垃圾信息收集,使用 -r 标志或 -bnogc 选项。 要禁止对个别对象文件进行垃圾回收,请使用 -bkeepfile 选项或 -bgcbypass 选项。 甚至当抑制垃圾信息收集时,将删除未引用的内部符号。
- 忽略的和不受支持的标志。
为了与其他版本的 ld 命令兼容,可以识别但忽略某些标志。 这些标志会生成一条消息,说明已忽略该标志及其操作数。 忽略的标志没有进一步的处理不会导致 ld 命令停止。 忽略下列标志:
-ANumber -bnostrcmpct -n -bfilelist -bstrcmpct -N -bfl -BNumber -Q -bforceimp -d -RNumber -bi -i -VNumber -binsert -j[Key:]Number -x -bnoforceimp -kKey:Path -YNumber注: 当 ld 命令行中出现 -bsvr4 选项时,将重新定义 -R 和 -z 选项。ld 命令中不支持的标志将导致错误消息。 在诊断完所有不支持的标志后,没有进一步处理 ld 命令将停止。
标志
ld 命令符合 XPG 实用程序语法准则,只是自变量 — 仅适用于下一个操作数,而不适用于命令行上的其余操作数。 例如,在命令行中,如果输入 ld --
-s -v,那么会将 -s 视为文件名,并将 -v 视为标志。 要将 -v 视为文件名,请输入 ld -- -s -- -v 。
| 项 | 描述 |
|---|---|
| -b选项 | 设置特殊处理选项。 您可以重复使用 -b 标志。 有关这些选项的更多信息,请参阅选项 (-b Options)。 |
-d [y | n] |
如果指定 -dy 选项, ld 命令将使用动态链接。 该选项等同于 -b so 选项。 如果指定 -dn 选项, ld 命令将使用静态链接。 该选项等同于 -b nso 选项。 默认选项为 -dy。 该选项仅在指定 -bsvr4 选项时有效。 |
| -D 数字 | 将初始化数据或输出文件数据部分的起始地址设置为 " 编号"。 如果指定的数字为 -1 ,则数据部分紧接着文本部分开始。 默认情况下,数据部分从位置 0 开始。 如果同时指定了 -D 和 -bpD 标志,那么后一个标志优先。 注: 系统装入器在运行时重新定位数据部分,因此指定的数字会影响地址映射中列出的地址或由 dump 或 nm 命令之类的实用程序打印的地址。
|
| -e 标签 | 设置可执行输出文件的入口点到
Label。 默认输入点是双下划线 start (__start)。 |
| -f FileID | 指定包含要处理的输入文件列表的文件。 文件 FileID 文件必须包含输入文件名列表。 文件中的每一行 FileID 文件中的每一行都会被当作 ld 命令行中的单独行来处理。 文件中的行可以包含星号 (*)、左括号 ([)、右括号 (])和问号 (?)等 shell 模式字符,这些字符通过 glob 子程序展开,可以指定多个对象文件。 |
| -G | 生成一个共享对象,可与运行时链接器一起使用。 -G 标志等同于使用 -b 标志指定 erok, rtl, nortllib, nosymbolic, noautoexp 和 M:SRE 选项。 后继选项可以覆盖这些选项。 |
| -H 数字 | 对齐输出文件的文本、数据和装入程序部分,以致每个部分在是
Number 倍数的文件偏移量处开始。 如果指定的数字是 1 ,则不进行对齐。 如果指定的数字为 0 ,则加载器部分按字边界对齐,文本和数据部分按边界对齐,以满足所有 CSECTs 部分的对齐要求。 缺省值为 0。如果指定的 " 编号 "导致输出文件中任何 |
| -K | 对齐输出文件的头、文本、数据和装入程序部分以致每一部分从页面边界处开始。 该标志等同于指定 -H Number ,其中 Number 是运行 ld 命令的机器的页面大小。 |
| -l Name | 处理 "libName.a文件 在动态模式下,使用 "rtl选项,处理 "libName.a或 "libName.so文件。 在所有情况下,将搜索由 -L 标志指定的目录或标准库目录 (/usr/lib 和 /lib) 中的目录以查找该文件。 在使用 rtl 选项的动态方式下,包含 libName.so 或 libName.a 的第一个目录满足搜索。 如果在同一目录中找到这两个文件,那么将使用 libName.so 文件。 可以重复使用此标志。 有关动态方式的更多信息,请参阅 运行时链接。 注: 即使在读取归档时未看到对符号的引用,也会保留符号的第一个定义。 在 ld 命令的其他版本中,如果在读取归档时未看到对该符号的引用,那么将忽略该归档中定义的符号。
|
| -L 目录 | 将目录添加到搜索目录列表中,用于查找由 -l 标志指定的图书馆。 除非使用 -blibpath, -bnolibpath或 -bsvr4 选项,否则还会在输出对象文件装入器部分中记录目录列表 (包括标准库目录) ,以供系统装入器使用。 可以重复使用此标志。 |
| -m 或 -M | 在标准输出中列出为创建输出文件而处理的所有文件和归档成员的名称。 不列示共享对象和导入文件。 |
| -o Name | 命名输出文件为 Name。 缺省情况下,输出文件名是 a.out。 |
| -r | 生成要用作另一个 ld 命令调用中的输入文件的不可执行输出文件。 此文件可能还包含未解析的符号。 -r 标志等同于使用 -b 标志指定 erok, noglink, nox和 nogc 选项。 (后继选项覆盖这些选项。) |
| -R Path | 定义一个以冒号分隔的目录列表,用于向运行时链接器指定库搜索目录。 只在 -bsvr4 选项出现在 ld 命令行时有效。 路径 (如果存在且不为 NULL)将记录在输出文件的加载器部分,在运行时将可执行文件与共享库链接时使用。 此选项的多个实例与每个 Path 并置,并用冒号隔开。 |
| -s | 当创建输出文件时,移除符号表、行号信息和重定位信息。 移除保留空格但不妨碍调试器的使用。 您还可以使用 strip 命令来删除现有可执行文件。 注: 如果非共享对象被除去,那么无法链接这些对象。 共享对象可以移除,但当静态链接时不能使用一个移除的共享对象。
|
| -S 数字 | 设置运行输出可执行程序文件时用户堆栈允许的最大字节数。 此值保存在辅助头中,系统装入程序使用此值来设置 软 ulimit。 缺省值为 0。 |
| -T 数字 | 设置输出文件的文本部分的开始地址到 Number。 缺省值为 0。 如果同时指定了 -T 和 -bpT 标志,那么后一个标志优先。 注: 系统装入程序在运行时重新定位文本部分,因此指定的数字会影响地址映射中列出的地址或由 nm 或 dump 命令之类的实用程序打印的地址。
请注意: 如果编号为
0x1000xxxxxxx ,且链接的程序为 64 位程序,则系统加载器会将可执行文本加载到从地址 0x10000000000 的段开始的内存中。 |
| -u Name | 防止外部符号名称的垃圾回收。 如果指定的符号不存在,将报告一个警告。 可以重复使用此标志。 |
| -v | 将有关绑定程序命令执行的其他信息写入 loadmap 文件。 |
| -V | 将 ld 命令的版本字符串写入标准错误(stderr)。 |
| -z | 在没有 -b svr4 选项的情况下, -z 标志的功能与 -K 标志相同。 |
| -z defs | 如果链接末尾仍有未定义的符号,则强制生成不可恢复的错误。 当构建可执行文件时,此选项是缺省值。 构建共享库时也是有用的,以便确保对象是独立的,即所有符号引用在内部解决。 此选项只在指定 -b svr4 选项时有效。 它等同于 -b ernotok 选项。 |
| -z nodefs | 允许未定义的符号。 当构建共享库时,此选项是缺省值。 当与可执行文件一起使用时,未指定对此类未定义符号的引用行为。 此选项只在指定 -b svr4 选项时有效。 它等同于 -b erok 选项。 |
| -z multidefs | 允许多个符号定义。 .o 文件的可重置对象之间出现多个符号定义,默认情况下会导致无法恢复的错误。 此选项消除了错误条件并允许采用第一个符号定义。 此选项只在指定 -b svr4 选项时有效。 |
| -z text | 如果针对 .text 部分的任何重定位仍仅处于动态模式,则强制执行不可恢复的错误。 此选项只在指定 -b svr4 选项时有效。 |
| -z nowarntext | 允许对所有可映射的部分进行重定位,包括仅在动态模式下的 .text 部分。 该选项是构建共享库时的默认选项。 此选项只在指定 -b svr4 选项时有效。 |
| -z warntext | 警告是否有任何针对 .text 部分的重定位仅保持在动态模式下。 该选项是创建可执行文件时的默认选项。 此选项只在指定 -b svr4 选项时有效。 |
| -Z 字符串 | 在搜索 -l 标志指定的库时,以 String 作为标准库目录名称的前缀。 例如,使用 -Z test 和 -lxyz 标志, ld 命令将查找 /test/usr/lib/libxyz.a 和 /test/lib/libxyz.a 文件。 当使用 -Z String 标志时,不搜索标准库目录。 此标志对保存在输出文件的装入程序部分中的库路径信息没有影响。 当你开发一个新版本的库时,这个标志非常有用。 可以重复使用此标志。 |
绑定程序
ld 命令会验证命令行参数,并调用粘合剂(默认情况下是 /usr/ccs/bin/bind 文件),同时传递生成的粘合剂子命令列表。 绑定程序链接文件。 虽然绑定程序由 ld 命令调用,但您可以直接启动绑定程序。 在这种情况下,绑定程序从标准输入中读取命令。
两个选项影响绑定程序的调用。 binder 指定调用哪一个绑定程序,nobind 选项防止 ld 命令调用绑定程序。 其他装订选项会影响生成的装订子命令。
如果 ld 命令没有检测到选项或命令行参数中的任何错误,它就会调用装订器。 以命令行的格式调用绑定程序:
bind [quiet_opt] [loadmap_opt]
quiet_opt 的默认值为 quiet , loadmap_opt 的默认值为空字符串,因此默认命令行如下:
/usr/ccs/bin/bind quiet
选项 (-b 选项)
- 在以下绑定程序选项列表中,由单词 或 分隔的两个选项名称是同义词。
- FileID 表示路径名称。 可以使用相对的或完整的路径名。
- 对于后跟自变量的不可重复选项,您可以使用空自变量来否定该选项。 也就是说,仅指定选项和冒号。
- 如果指定的选项相互冲突,则以最后一个选项为准。
| 项 | 描述 |
|---|---|
| 32 | 指定 32 位链接方式。 在这种方式下,所有输入对象文件必须是 XCOFF32 文件,否则会报告错误。 忽略 XCOFF64 归档成员。 对于指定特定符号方式的导入或导出文件,将忽略 64 位符号。 如果同时指定了 -b32 和 -b64 选项,那么将使用最后指定的选项。 如果未指定任何选项,那么将根据环境变量 OBJECT_MODE的值确定方式。 |
| 64 | 指定 64 位链接方式。 在此方式下,所有输入对象文件都必须是 XCOFF64 文件,否则将报告错误。 忽略 XCOFF32 归档成员。 对于指定特定符号方式的导入或导出文件,将忽略 32 位符号。 如果同时指定了 -b32 和 -b64 选项,那么将使用最后指定的选项。 如果未指定任何选项,那么将根据环境变量 OBJECT_MODE的值确定方式。 |
| asis | 处理所有混合大小写的外部符号。 此选项是缺省选项。 要处理所有大写的外部符号,请参阅以下 caps 选项。 |
| aslr 或 aslr:[tdsmp] * 或 aslr:- | 指定程序的地址空间布局随机化。 aslr 选项会启用所有随机化属性,而 -baslr:-, 则会禁用随机化属性。如果 aslr 选项后跟冒号,那么可以启用各个属性。 以下属性表示文本,数据,堆栈, mmap 和专用库: t, d, s, m和 p。 对于未列出的属性,将保持禁用随机化设置。
注: 不能为 32 位程序指定 m 和 p 属性。
对某些程序进行了编译和链接,从而将可重定位的地址映射到文本部分中。 此选项要求在运行程序时重定位地址。 如果对文本或数据启用了随机化,那么这些程序将失败。 因此,当存在文本段重新定位时,除非使用 aslr 选项明确指定 t 和 d 属性,否则不会启用文本和数据随机化。
|
| autoexp | 自动地从输出模块中导出一些符号,不必在导出文件中列示它们。 (此选项不从输出模块中导出所有符号。 使用 bexpall 选项导出所有符号。) 此选项是缺省值。 连接主程序时使用该选项。 当未指定以 S 开头的模块类型 (使用 M 或 modtype 选项) 并且未使用 noentry 选项时,链接程序假定您正在链接主程序。使用 autoexp 选项时,如果命令行中列出的任何共享对象从特殊文件 . (dot) 中导入了一个符号,且链接的模块包含该符号的本地定义,则该符号会自动导出。 当您使用 rtl 选项进行链接时,还会自动导出其他符号。 如果链接的模块中定义的符号具有一个或多个从命令行上列出的共享对象导出的定义,并且如果其中任何定义是 BSS 符号,那么将自动导出该符号。 如果链接的模块中的定义是 BSS 符号,那么将使用 nosymbolic 属性导出该符号。 否则,符号以 symbolic 属性导出。 如果符号以其他的导出属性列在导出文件里,使用显式属性。 如果 "autoexp选项自动导出一个符号,但该符号被列在带有 "list属性的导出文件中,则该符号不会被导出。 |
| autoimp 或 so | 从指定为输入文件的任何共享对象导入符号。 共享对象被引用,但不作为输出对象文件的一部分被包含。 此选项是缺省选项。 |
| autoload: path/file (member) | 自动装入归档成员。 |
| bigtls | 如果输出对象或程序中的线程本地存储空间大于 64 KB,则生成额外代码。 编译器用于生成对 local-exec 或 local-dynamic 线程本地变量的直接引用。 对于不能以 16 位偏移量寻址的 线程本地变量的每个直接引用,都需要额外代码。 因为包含额外代码的程序可能性能较差,所以最好减少使用直接引用的线程局部变量数,而不是使用该选项。 缺省选项是 nobigtls 选项。 |
| bigtoc | 如果目录 (TOC) 的大小大于 64 KB ,那么生成额外的代码。 对于不能以 16 位偏移量寻址的 TOC 符号的每个引用都需要额外代码。 因为包含所生成代码的程序的性能可能很差,所以在使用此选项之前,请减少该程序所需的 TOC 条目数。 缺省值为 nobigtoc 选项。 使用此选项时,将以 32 位方式使用 glink 文件 /usr/lib/glinkl.o ,以 64 位方式使用 /usr/lib/glinkl64.o 。 |
| bimpctr | 优化大型 64 位可执行对象文件中的函数调用性能,如果被调用函数与调用函数定义在同一模块中,而被调用函数与调用位置的偏移量超过 32 MB。 该选项只有在指定了说明文本来源的 "-bpT标记,且未启用文本的 "aslr选项时才起作用。 |
| bimpptrgl | 优化大型 64 位可执行对象文件中的函数调用性能,在这种情况下,被调用函数需要将 "_ptrgl符号作为目标函数,而 "_ptrgl符号的定义与调用位置的偏移量超过 32 MB。 函数调用可以使用函数指针,或者被调用函数与调用函数定义在不同的模块中。 该选项仅在指定编译器标志 "-qnoinlglue时有效。 |
| bindcmds:FileID | 将 ld 命令生成的绑定程序命令的副本写入 FileID。 当将绑定程序作为独立程序调用时,可以将生成的文件作为标准输入重定向到绑定程序。 缺省情况下,不生成文件。 |
| binder:FileID | 使用 FileID 作为 ld 命令调用的绑定程序。 缺省绑定程序是 /usr/ccs/bin/bind 文件。 |
| bindopts:FileID | 将绑定程序程序参数的副本写到 FileID。 您可以使用生成的文件将绑定程序作为独立程序启动。 缺省情况下,不生成文件。 |
| C:文件 ID或 "calls:文件 ID | 将输出对象文件的地址映射写入 FileID。 先按段和后按地址排序符号。 对于列在映射中的每个符号,列示了从这个符号到另一个符号的引用。 缺省情况下,不生成文件。 要了解有关 calls 选项的更多信息,请参阅 地址映射。 |
| caps | 处理所有大写的外部符号。 缺省值为 asis 选项。 |
| cdtors[: [incl] [: [nnn] [:order]]] | 链接程序收集关于 C++ 静态构造函数或析构函数的信息并将此信息保存在输出文件中。 incl
子选项告知链接程序在创建保存信息时要搜索哪些归档成员。 以下是可能的值:
nnn 子选项指定输出模块的优先级。 如果程序同时装入多个模块,那么将使用 nnn 子选项来控制模块初始化的顺序。 (如果输出文件是程序并且不是共享对象,那么会忽略此优先级。) 此优先级的范围为 -231 到 231-1。 缺省优先级为 0。 从-231到-231+1023 之间的值为 C++ 运行时初始化保留。 对于具有相同优先级的所有函数,order 子选项指定调用各个构造函数或析构函数的顺序。 以下是可能的值:
可以多次指定此选项,但只使用指定的最后一个子选项。 取消指定的子选项不影响当前值或缺省值。 例如, -bcdtors:csect:20:s -bcdtors:::r 与 -bcdtors:csect::20:r相同。 缺省值为 -bnocdtors。 如果指定了 -bcdtors ,那么它与 -bcdtors:all:0:s相同。 注意:
|
| comprld 或 crld | 可能的话,连接同一地址上的多个重定位项(RLD)到单一的 RLD。 此选项是缺省选项。 |
| cror15 | 使用 cror 15,15,15 (0x4def7b82) 指令作为跟在调用指令后面的特殊 no-op 指令。 缺省值为 ori 0, 0,
0 (0x60000000)。 请参阅 nop 选项。如果要在AIX 3.1 上重新链接当前级别系统上的对象文件,请使用此选项。 |
| cror31 | 使用 cror 31,31,31 (0x4ffffb82) 指令作为跟在调用指令后面的特殊 no-op 指令。 缺省值为 ori 0, 0,
0 (0x60000000)。 请参阅 nop 选项。在 AIX 3.2上要重新链接的系统的当前级别上链接对象文件时,请使用此选项。 |
| D: Number [/dsa] 或 maxdata:Number[/dsa] | 设置运行可执行程序时允许用户数据区或用户堆的最大大小(以字节为单位)。 此值保存在辅助头中,系统装入程序使用此值来增加软数据限制 (如果需要)。 缺省值为 0。 使用此选项时,会为用户数据区保留指定的字节数。 程序可能无法使用 shmat 或 mmap 函数将对象显式映射到为用户数据区保留的虚拟地址。 对于 32 位程序,系统允许的最大值为 0x06FFFFFFFFFFFFF8 ,数据区都无法扩展。 |
| datapsize大小 | 请求数据的 psize 页面大小 (以字节为单位)。 该值可以指定为十进制、十六进制或八进制数。 数字规范与 C 编程语言中的数字规范相同。 此外,可以将页面大小指定为后跟一个字符后缀的数字:
-b datapsize:16k 或 -b datapsize:0x4000 请求 0x4000 获取数据,并在 XCOFF 头中设置 F_VARPG 位。 |
| dbg:Option 或 debugopt:Option | 设置特定调试或控制选项。 缺省情况下,不设置调试选项。 使用 dbg:loadabs 或 debugopt:loadabs 选项表示在由 -T 和 -D 标志指定的同一地址上装入输出程序。 在此情况下,不改变绝对分支指令到(相对)分支指令,即使其目标是可重新定位的符号。 类似地,也从不将分支指令改变成绝对分支指令。 |
| delcsect | 如果 CSECT 中的任何符号是由先前读取的对象文件定义的,则删除 CSECT 中的所有符号。 此选项防止同一程序上出现不止一个的相同函数的实例。 例如,如果 a.o 文件定义了函数 a() ,而 b.o 文件定义了函数 a() 和 b() ,那么用 -bdelcsect 选项链接 a.o 和 b.o 就会删除 b.o 中的符号 a() 和 b() 。 因此,不存在两个 a() 实例。 缺省值是 nodelcsect 选项。 |
| dynamic 或 shared | 导致链接程序用动态方式处理后继共享对象。 此选项是缺省选项。 动态方式下,共享对象不是以静态方式包含在输出文件中。 相反,共享对象列在输出文件的装入程序部分。 当指定 rtl 选项且动态模式生效时,以 .so 和 .a 结尾的文件将满足对 -l 标记指定的库的搜索。 当两者都生效时,当在同一目录中存在时,会将首选项指定给 .so 而不是 .a 。 当您指定 rtl 选项并且静态方式生效时,将处理以 .a 结尾的文件。 |
| E:文件 ID或 "export:文件 ID | 导出文件 FileID中列出的外部符号。 输出文件的加载器部分列出了导出的符号。 没有缺省的导出文件。 使用 "svr4选项时,"E:FileID选项会取消任何 "expall或 "expfull选项。 |
| ernotok 或 f | 如果存在任何未解决的外部引用,则会报错。 此选项是缺省选项。 |
| erok | 生成无错误的输出对象文件,即使有未解析的外部引用。 缺省值为 ernotok 选项。 |
| errmsg | 如果信息的错误级别大于或等于 halt 选项的值,并且使用了 quiet 选项或标准输出被重定向,则将错误信息写入标准错误。 此选项是缺省选项。 |
| ex1:FileID、ex2:FileID、ex3:FileID、ex4:FileID 和 ex5:FileID | 在典型的绑定程序子命令序列中提供用户出口。 指定的文件 FileID 指定的文件必须包含一个装订子命令列表,运行方式如下:
|
| expall | 导出所有全局符号,但导入的符号、存档成员中定义的未引用符号以及下划线 (_) 开头的符号除外。通过在导出文件中列出符号或使用 expfull 选项,可以导出更多符号。 该选项不影响 autoexp 选项导出的符号。 使用该选项时,可以通过使用导出文件来避免这种例外情况。 不过,使用导出文件可以对导出的符号进行明确控制。 它允许你在共享对象中使用其他全局符号,而不必担心与其他共享对象导出的名称冲突。 缺省值为 noexpall。 |
| expfull | 导出所有全局符号,但导入的符号和存档成员中定义的符号除外。 与 -bexpall 选项不同, -bexpfull 选项会导出以下划线 (_) 开头的符号,还会导出符号的模块入口点。 根据特定用例和运行时链接程序的配置, -bexpfull 选项的实际行为可能有所不同。 -bexpfull 选项不会影响 autoexp 选项导出的符号。 除非 svr4 选项与 -b 标志一起使用,否则缺省值为 noexpfull 。 |
| export:FileID | 功能与 E: FileID 选项一样。 |
| f | 功能与 ernotok 选项一样。 |
| forceimprw | 强制包含导入符号引用的只读 CSECTs 变为读取或写入。 默认值为 noforceimprw。 |
| forkpolicy:策略 | 在链接 64 位程序时,设置 XCOFF 辅助头中的 _AOUT_FORK_POLICY 和 _AOUT_FORK_COR 标志。 如果策略为 cor ,则还会设置 _AOUT_FORK_COR 标志,要求在运行程序时使用 "参照复制 "Forktree 策略。 如果策略为 " 牛" ,则重置 _AOUT_FORK_COR flag ,要求在运行程序时使用 "写时复制 "Forktree 策略。 链接至 32 位程序时,将忽略此标志。 默认值为 noforkpolicy。 |
| gc | 执行垃圾收集。 使用 nogc,gcbypass 或 keepfile 选项防止一些或所有对象文件的垃圾收集。 此选项是缺省选项。 |
| gcbypass:数字 | 如果指定了 gc 选项,那么指定在收集垃圾时要绕过的文件数。 如果使用 nogc 选项,忽略此选项。 如果 Number 为 0 ,则该选项等同于 gc 选项,并对所有文件执行垃圾回收。 缺省值为 0。 |
| glink:FileID , glink=large 或 glink=small | 利用 FileID. 指定。 生成每个导入或未定义的函数的全局链接界面。 在 32 位方式下,缺省值为 /usr/lib/glink.o 文件或 /usr/lib/glinkl.o (如果使用 bigtoc 选项)。 在 64 位模式下,默认为 "/usr/lib/glink64.o文件,如果使用 "bigtoc选项,则默认为 "/usr/lib/glinkl64.o文件。 您也可以使用 "glink=large来指定 32 位模式下的 "/usr/lib/glinkl.o和 64 位模式下的 "/usr/lib/glinkl64.o,或者使用 "glink=large来覆盖之前的 "glink选项。 |
| h:Number 或 halt:Number | 指定绑定程序命令继续处理的最大错误级。 缺省值为 4。 如果任何装订子命令的返回值大于 Number ,则不会处理其他装订子命令。 如果停机级别值为 8 或更高,那么输出文件可能不是可执行文件 (如果它是完全生成的)。 以下是返回值:
|
| I:FileID 或 import:FileID | 导入 FileID. 中列出的符号。 没有缺省的导入文件。 |
| initfini:[ 初始] [:终止] [:优先级] | 指定模块的初始化和终止函数,其中 Initial 是初始化例程, Termination 是终止例程, Priority 是带符号整数,取值范围为 -2, 147, 483, 648 到 2, 147, 483, 647。 至少指定 Initial 和 Termination中的一个,如果同时省略 Termination 和 Priority,那么还必须在 Initial 之后省略冒号。 如果未指定 优先级,那么缺省值为 0 。 可以重复选项。 此选项以优先级排序例程,以最小的(大多数是负数)优先级开始。 它按顺序启动初始化例程,按相反顺序启动终止例程。 该选项按未指定的顺序启动具有相同优先级的例程。 如果多个 initfini 选项指定了相同的优先级以及初始化和终止例程,则会保留例程的相对顺序。 例如,如果指定了 initfini:i1:f1 和 initfini:i2:f2 选项,函数 i1 和 i2 将以未指定的顺序启动,但如果在加载模块时 i1 在 i2 之前启动,则在卸载模块时 f2 在 f1 之前启动。 注意:
|
| ipath | 对于列在命令行中的共享对象,不是用 -l 标志指定共享对象,而当在输出文件的装入程序部分列示共享对象时使用路径组件。 此选项是缺省选项。 |
| keepfile:FileID | 防止对 FileID. 默认情况下,活页夹会删除所有文件中未引用的 CSECTS 。 可以重复使用此选项。 |
| lazy | 启用模块依赖模块的懒加载。 此选项将添加 -lrtl 选项,该选项跟在其他标志和选项之后。 如果指定了 -brtl 选项,那么将忽略 -blazy 选项,并且不会启用延迟装入。 当一个模块被链接时,其依赖模块的列表会保存在模块的加载器部分。 在装入模块后系统装入程序自动地装入从属模块。 启用延迟加载时,延迟一些从属模块的装入直到在第一时间调用模块里的函数。 当模块的所有引用是函数调用时,延迟加载模块。 如果模块里的变量是引用的,那么将以典型方式装入模块。 注: 如果您使用的是延迟装入,请在比较函数指针时务必小心。 通常,函数有唯一的地址比较两个函数指针确定是否指向同一函数。 通过使用延迟装入来链接模块时,延迟装入模块中函数的地址与其他模块计算的地址不同。 依赖于函数指针比较的程序不得使用延迟装入。
有关延迟装入的更多信息,请参阅 共享库和延迟装入。 |
| l:FileID 或 loadmap:FileID | 将每个活页夹子命令及其结果写入 FileID。 缺省情况下,不生成文件。 |
| lgloadtoadd: 类型1 [: 类型2 ]..[: 类型N ] | 控制将加载指令转换为加立即数或加载立即数指令的过程,适用于使用选项 -qpic=large 编译的程序。 可以通过指定符号类型来控制不同类型符号的转换。 类型选项具有以下值:
可以用冒号( 注意: 请谨慎启用
text 类型符号的转换。 设置 "-bpT:和 "-bpD:选项,以匹配文本和数据段的加载时间地址。 如果链接时间地址和加载时间地址不匹配,可能会出现意外行为。
|
| 项 | 描述 |
|---|---|
| libpath:路径 | 在编写输出文件的加载器部分时,使用 Path 作为库路径。 在搜索由以下方式指定的库时,不会检查路径的有效性,也不会使用路径: -l 旗帜。 Path 覆盖使用 -L 标志时生成的任何库路径。 如果不指定任何 -L 标志或指定 nolibpath 选项,在输出文件的装入程序部分中写入缺省库路径信息。 缺省库路径信息为 LIBPATH 环境变量 (如果已定义) 的值,否则为 /usr/lib:/lib。 |
| llu | 将可执行文件标记为支持在线库更新(LLU)。 |
| loadmap:FileID | 功能与 l: FileID 选项一样。 |
| lpdata | 在可执行文件的 XCOFF 头中设置 F_LPDATA 位。 设置了该位时,进程将为其数据请求大页面。 |
| M:ModuleType 或 modtype:ModuleType | 在对象文件中设置两字符的模块类型域和共享对象标志。 绑定程序不会检查模块类型,但必须将其设置为以下值之一:
|
| map:FileID 或 R:FileID | 将输出对象文件的地址映射写入 FileID。 先按段和后按地址排序符号。 缺省情况下,不生成文件。 要了解有关 map 选项的更多信息,请参阅 地址映射。 |
| maxdata:编号[/dsa] | 功能与 D: Number[/dsa] 选项一样。 |
| maxstack:Number 或 S:Number | 功能与 -S 标志一样。 |
| modtype:ModuleType | 功能与 M: ModuleType 选项一样。 |
| nl 或 noloadmap | 不会将装订子命令及其结果写入加载映射文件。 此选项是缺省选项。 |
| noaslr | 取消先前 aslr 选项在命令行上的影响。 |
| noautoexp | 防止自动导出任何符号。 缺省值为 autoexp 选项。 |
| noautoimp 或 nso | 链接任意未移除的、共享的对象作为普通的对象文件。 使用此选项时,不使用共享对象的装入程序部分。 缺省值是 autoimp 或 so 选项。 注: 通过使用其中任一标志,您可以静态地将共享对象文件链接到应用程序中。 静态链接的任何应用程序都不是从任何修订或发行版级别到任何其他修订或发行版级别的二进制可移植。
|
| nobigtls | 如果编译器生成对线程本地变量的直接引用,并且其中一个变量的重定位因为线程本地存储器的大小大于 64 KB 而 发生溢出,那么生成严重错误消息。 如果生成了输出文件,那么它不会正确运行。 nobigtls 选项是缺省选项。 |
| nobigtoc | 如果 TOC 的大小超过 64 KB,那么生成严重错误消息。 如果生成了输出文件,那么它不会正确运行。 此选项是缺省选项。 |
| nobind | 省略调用绑定程序。 相反, ld 命令会将生成的装订子命令列表写入标准输出。 缺省情况下,ld 命令调用绑定程序。 |
| nocdtors | 不收集静态构造函数或析构函数。 此选项是缺省选项。 |
| nocomprld 或 nocrld | 不将同一地址的多个重定位项(RLD)组合到单一的 RLD。 缺省值是 comprld 或 crld 选项。 |
| nodelcsect | 在符号分辨率中允许考虑 CSECT 里所有符号,即使 CSECT 里的一些符号已在先前的读取对象文件中被定义。 关于更多信息,请参阅 delcsect 选项。 nodelcsect 选项是缺省值。 |
| noexpall | 除非在导出文件中列出或使用 autoexp 选项导出,否则不会导出符号。 此选项是缺省选项。 |
| noexpfull | 除非在导出文件中列出或使用 autoexp 选项导出,否则不会导出符号。 除非使用 svr4 选项,否则此选项是缺省值。 |
| noentry | 表示输出文件无入口点。 保留任意需要的符号,用 -u 标记或导出的文件指定它们。 可以使用 -r 标志或 nogc 或 gcbtpass 选项保留一些或所有对象文件的所有外部符号。 如果不使用 noentry 或 nox 选项,而又找不到入口点,系统将发出警告。 使用 svr4 选项时,将禁止此警告。 |
| noerrmsg | 不将错误消息写入标准错误。 如果指定 noquiet 选项,并将标准输出传送到诸如 tee 或 pg之类的命令,请使用此选项。 |
| noforceimprw | 允许只读 CSECTs 引用导入的符号。 此选项是缺省选项。 |
| noforkpolicy | 链接 64 位程序时,清除 XCOFF 辅助头中的 _AOUT_FORK_POLICY 和 _AOUT_FORK_COR 标志。 除非使用 VMM_CNTRL 环境变量指定了 forktree 策略,否则将使用默认的 forktree 策略。 链接至 32 位程序时,将忽略此标志。 此选项是缺省选项。 |
| nogc | 防止垃圾收集。 所有包含全局符号的对象文件中的 CSECTs ,无论是否被引用,都会被保留。 缺省值为 gc 选项。 |
| noglink | 防止 ld 命令插入全局链接代码。 缺省情况下,绑定程序插入全局链接代码。 |
| noipath | 对于列在命令行中的共享对象,不是用 -l 标志指定共享对象,而是当列示在导出文件的装入程序部分的共享对象时使用空路径组件。 空路径组件始终用于使用 -l 标志指定的共享对象。 此选项不影响通过使用在导入文件中以 #! 开头的行来指定路径组件。 缺省值是 ipath 选项。 |
| nolibpath | 覆盖由 -L 标志生成或由 libpath 选项指定的任何先前库路径。 相反,缺省库路径信息写在输出文件的装入程序部分。 缺省库路径信息是 LIBPATH 环境变量的值(如果被定义的话),否则就是 /usr/lib:/lib。 |
| nollu | 将可执行文件标记为不支持在线库更新(LLU)。 |
| noloadmap | 功能与 nl 选项一样。 |
| nolpdata | 清除可执行文件的 XCOFF 头中的 F_LPDATA 位。 未设置该位时,进程将为其数据使用小(常规)页面。 |
| nom | 不列出用于创建输出文件的对象文件。 此选项覆盖 -m 标志。 此选项是缺省选项。 |
| noobjreorder | 不使用深度优先 CSECT 重排序逻辑。 输出文件中 CSECTs 的排列顺序与命令行中指定的对象文件和库文件的排列顺序相同,但以下情况除外:
如果同时指定了 noobjreorder 和 noreorder 选项,那么 noreorder 选项优先。 缺省值是 reorder 选项。 |
| noorder_file | 不要以指定顺序映射符号。 此标志会取消上一个 -border_file 标志的影响。 此选项是缺省选项。 |
| nop:不 | 指定在到本地例程的分支之后使用的 no-op 指令。 Nop 可能是特定值
cror15、cror31 或 ori 之一,或一个八位的十六进制数。 ori 指令是缺省值。 指定 -bnop:cror15 选项等同于指定 -bcror15 选项;指定 -bnop:cror31 选项等同于指定 -bcror31 选项。 如果指定其中一个特殊 nop 选项,那么将覆盖所有先前的 nop 选项。 如果 Nop 是一个八位的十六进制数,指定任意的机器指令。 机器指令覆盖所有先前为 Nop 指令指定的特定值。 当使用此格式时,可以重复此选项。 指定的最后一个机器指令是绑定程序在模块内分支后生成的指令。 其他指定的机器指令识别成 no-op 指令,但转换成首选的 no-op 指令。 |
| noplugin_opt | 废弃使用 plugin_opt 选项指定的任何先前插件选项。 |
| noquiet | 将每个绑定程序子命令和其结果写入标准输出。 缺省值为 quiet 选项。 |
| noreorder | 除了将所有 XMC_TC(TOC 地址常量)和 XMC_TD(TOC 变量) CSECTs ,并将其置于数据部分,以及将所有 BSS 符号合并并置于 bss 部分外,不对 CSECTs 重新排序。 所有其他 CSECTs 都放在文本部分,因此在输出文件中文本和数据是混合的。 当使用 noreorder 选项时,输出文件的文本部分可能不再与位置无关,如果文本部分与位置无关,系统加载器将不会加载模块。 因此,请避免将此选项用于程序和内核扩展。 如果同时指定 noobjreorder 和 noreorder 选项,则 noreorder 选项优先。 缺省值是 reorder 选项。 |
| nortl | 禁用输出文件的运行时链接。 该选项意味着 nortllib 和 nosymbolic- 选项。 此外,不会执行 rtl 选项下描述的更多操作。 除非使用 svr4 选项,否则此选项是缺省值。 |
| nortllib | 不包含运行时链接器的引用。 如果使用此选项链接主程序,那么不会在程序中进行运行时链接,而不考虑程序所使用的任何共享模块的链接方式。 除非使用 svr4 选项,否则此选项是缺省值。 |
| norwexec | 指定如果系统的 sed_config 设置未关闭,则进程的私有数据区没有执行权限。 |
| noshrsymtab | 防止在输出对象中设置 _AOUT_SHR_SYMTAB 标志。 此选项是缺省状态。 |
| nostabsplit | 阻止调试节被写入扩展名为 .stab 的备用输出文件。 此选项为缺省设置。 |
| nostrip | 不生成移除的输出文件。 符号表和重定位信息将写入输出文件。 此选项覆盖 -s 标志。 此选项是缺省选项。 |
| nosymbolic | 将 nosymbolic 属性分配给大多数没有以显式属性导出的符号。 有关更多信息,请参阅 导出符号的属性。 缺省值是 nosymbolic- 选项。 |
| nosymbolic- | 将 nosymbolic- 属性分配给大多数没有以显式属性导出的符号。 有关更多信息,请参阅 导出符号的属性。 此选项是缺省选项。 |
| notextro 或 nro | 不检查是否存在输出对象文件文本部分的加载时重置条目。 此选项是缺省选项。 |
| notmprelname | 绑定程序不检查常规实例化。 注: 仅 32 位方式需要此选项。 构建 64 位对象时,将忽略此选项。
|
| notypchk | 不检查外部函数调用之间的函数参数类型。 缺省值为 typchk 选项。 |
| nov | 不将附加信息写到装入映射文件。 此选项是缺省值并且覆盖 -v 标志。 |
| noweaklocal | 通过使用正常搜索顺序来解析弱符号。 此选项会覆盖 weaklocal 选项。 它是缺省选项。 |
| nox | 不会使输出文件成为可执行文件。 即不写辅助头,也不写装入程序部分。 指定在辅助头或装入器部分中写入的值的标志和选项在使用此选项时无效。 缺省值为 x 选项。 |
| nro | 功能与 notextro 选项一样。 |
| nso | 功能与 noautoimp 选项一样。 |
| order_file:FileID | 按指定顺序映射列示在 FileID 中的符号。 先映射列示在该文件中的符号,然后再映射相同存储映射类的其他符号。 该文件中指定的函数名必须以句点开始,因为不以句点开头的函数名表示函数描述符。 有关 "order_file格式文件的更多信息,请参阅 "order_file格式部分。 |
| order:规范 | 控制输出文件中某些符号映射的顺序。 规格如下:
|
| pD:源 | 将原点指定为包含数据部分开头的文件页第一个字节的地址。 例如,如果数据部分从对象文件中的偏移量 0x22A0 开始,并且指定了 pD:0x20000000 ,那么将为数据部分的第一个字节分配地址 0x200002A0。 此选项假定页面大小为 4096 (0x1000) 字节。注: 如果同时指定了 -bpD 和 -D 标志,那么后一个标志优先。
|
| plugin:路径 | 指定编译器插件的完整路径。 此选项通常由编译器生成 (如果需要)。 如果要取消先前指定的插件路径,请不要指定 path 变量 -bplugin:。 如果输入文件是位码文件或包含位码文件的归档,并且未指定插件路径,那么 ld 命令将失败。 |
| plugin_opt:plugin-选项 | 指定要传递到编译器插件的选项。 您可以多次指定 plugin_opt 选项。 此选项通常由编译器生成。 |
| pT:源 | 将原点指定为包含文本部分开头的文件页第一个字节的地址。 例如,如果文本部分从对象文件中的偏移量 0x264 开始,并且指定了 pT:0x10000000 ,那么文本部分的第一个字节将分配给地址 0x10000264。
|
| quiet | 不会将装订子命令及其结果写入标准输出。 此选项是缺省选项。 |
| 项 | 描述 |
|---|---|
| R:FileID | 功能与 map: FileID 选项一样。 |
| r 或 reorder | 作为 save 命令处理的一部分,重新排序 CSECTs 。 重新排序过程会按引用的远近排列同一存储映射类别的 CSECTs 。 此选项是缺省选项。 |
| ras | 在输出模块的辅助标头中设置一个标志,表示该模块既是存储密钥安全的,也是恢复安全的。 有关如何使内核扩展成为密钥安全和恢复安全的更多信息,请参阅 内核扩展和设备支持编程概念 。 |
| rename:符号, NewName | 将外部符号 Symbol 重命名为 NewName。 实际上,这就好像是在处理文件前将所有对象文件里的 Symbol 定义和引用重命名为 NewName。 缺省情况下,不重命名符号。 |
| reorder | 功能与 r 选项一样。 |
| ro 或 textro | 确保没有结果对象文件的文本部分的装入时重定位条目。 缺省值为 nro 选项。 |
| rtl | 为输出文件启用运行时链接。 该选项意味着 rtllib 和 symbolic 选项。 当动态模式生效时(参见 dynamic 和 static 选项), rtl 选项允许使用 -l 标志指定的输入文件以 .so 和 .a 结尾。 全部是共享对象的输入文件作为程序的从属列在输出文件装入程序部分。 共享对象按在命令行中指定的相同顺序列示。 仅当归档指定自动装入共享对象成员时,才会列出归档中包含的共享对象。 您可以通过创建具有以下行的导入文件来指定归档成员 foo.o 的自动装入:
您可以使用 -bautoloads 选项指定更多归档成员。 如果导入文件的第一行以#! (数字符号,感叹号) 开头,那么可以在命令行上将该文件指定为普通 InputFile。 否则,必须使用 -bI 或 -bimport 选项来指定导入文件。 |
| rtllib | 包括运行时链接器的引用。 运行时链接程序在 librtl.a中定义,并且会自动将隐式 -lrtl 标志添加到命令行。 链接主程序时必须使用此选项 (由 rtl 选项隐含) ,否则不会发生运行时链接。 共享对象不必用该选项链接。 缺省值为 nortllib 选项,除非使用 svr4 选项。 |
| rwexec | 指定进程私有数据区的执行权限是否根据系统的 sed_config 设置确定。 此选项是缺省选项。 |
| rwexec_must | 指定进程的私有数据区具有执行权限,与系统的 sed_config 设置无关。 |
| S:数字 | 功能与 -S 标志一样。 |
| scalls:FileID | 将对象文件的地址映射写到 FileID。 按字母顺序列示符号。 对于列在映射中的每个符号,列示了从这个符号到其他符号的引用。 缺省情况下,不生成文件。 要了解有关 scalls 选项的更多信息,请参阅 地址映射。 |
| shared | 功能与 dynamic 选项一样。 |
| shmpsize: psize | 以字节为单位请求共享内存的 psize 页面大小。 指定的值必须是 2 的幂。 如果没有,那么该值将向下舍入为最接近的 2 次幂。 该值可以指定为十进制、十六进制或八进制数。 此外,可以将页面大小指定为后跟一个字符后缀的数字:
-b shmpsize:64k 或 -b shmpsize:0x10000 请求共享内存的页面大小为 64 KB。 如果指定的值不是 0 ,那么将设置 XCOFF 头的 f_flags 成员的 F_VARPG 位。 如果指定了 0 ,那么将清除 F_VARPG。 程序使用共享内存的缺省页面大小。 在 32 位方式下,将忽略此标志并打印一条警告消息。 |
| shrsymtab | 在 64 位模式下,在 XCOFF 辅助头中设置 _AOUT_SHR_SYMTAB 标志。 如果 File 是 64 位程序,那么运行该程序时会创建共享符号表。 如果 File 是 64 位对象而不是 64 位程序,那么可以设置 _AOUT_SHR_SYMTAB 标志,但在运行时不起作用。 在 32 位模式下,将忽略此标志。 缺省值为 noshrsymtab。 |
| smap:FileID | 将对象文件的地址映射写到 FileID。 按字母顺序列示符号。 缺省情况下,不生成文件。 要了解有关 smap 选项的更多信息,请参阅下面的 地址映射 。 |
| so | 功能与 autoimp 选项一样。 |
| stabcmpct:级别 | 指定调试部分中 stabstring 的压缩级别。 Stabstrings 字符串是长度超过 8 个字符的字符串。 符号表里的每个子串在调试部分中有自己的偏移量。 对于 Level,下列值是有效的:
|
| stabsplit | 将调试部分写入扩展名为 .stab 的备用输出文件。 |
| stackpsize:psize | 请求进程主线程堆栈的 psize 页面大小(以字节为单位)。 该值可以指定为十进制、十六进制或八进制数。 数字规范与 C 编程语言中的数字规范相同。 此外,可以将页面大小指定为后跟一个字符后缀的数字:
-b stackpsize:16k 或 -b stackpsize:0x4000 请求 0x4000 进程主线程堆栈,并在 XCOFF 头中设置 F_VARPG 位。 |
| static | 使链接器能以静态模式处理后续共享对象。 静态方式下,共享对象静态链接在输出文件里。 |
| svr4 | 更改命令行上其他一些选项的含义和链接器的标准行为。 它对链接程序有以下影响:
|
| sxref:FileID | 将对象文件的地址映射写到 FileID。 按字母顺序列示符号。 对于列在映射中的每个符号,列示了从这个符号到其他符号的引用。 缺省情况下,不生成文件。 要了解有关 sxref 选项的更多信息,请参阅下面的 地址映射 。 |
| symbolic | 将 symbolic 属性分配给大多数没有以显式属性导出的符号。 有关更多信息,请参阅下面的 已导出符号的属性 。 当使用 svr4 选项时,此选项是缺省值。 否则,缺省值为 symbolic- 选项。 |
| textro | 功能与 ro 选项一样。 |
| textpsize:psize | 以字节为单位请求 psize 文本页面大小。 该值可以指定为十进制、十六进制或八进制数。 数字规范与 C 编程语言中的数字规范相同。 您可以将页面大小指定为一个数字,后跟一个单字符后缀:
-b textpsize:16k 或 -b textpsize:0x4000 请求 0x4000 文本,并在 XCOFF 头中设置 F_VARPG 位。 |
| tmplrename | 指定绑定程序必须检查常规实例化。 绑定程序检查表单 __tfNNxxx_name 的任何符号并将符号重命名为 name。 缺省值为 -bnotmplrename。 注: 仅 32 位方式需要此选项。 构建 64 位对象时将忽略此选项。
|
| typchk | 执行外部函数调用之间的函数参数类型的检查。 参数类型检查的信息可由编译器和汇编程序包含在对象文件中。 此选项是缺省选项。 有关类型检查的更多信息,请参阅 XCOFF 对象文件格式。 |
| weaklocal | 指定首先在引用弱符号的对象文件中搜索这些弱符号。 如果未在其中找到这些符号,将恢复使用正常的搜索顺序。 |
| x | 使输出文件成为可执行文件 (如果不存在错误)。 此选项是缺省选项。 |
| X 或 xref:FileID | 将对象文件的地址映射写到 FileID。 先按段和后按地址排序符号。 对于列在映射中的每个符号,列示了从这个符号到其他符号的引用。 缺省情况下,不生成文件。 要了解有关 xref 选项的更多信息,请参阅下面的 地址映射 。 |
运行时链接
缺省情况下,链接时绑定共享对象里的符号引用。 即,输出模块将导入模块与在特定共享对象里的定义关联在一起。 在装入时,将使用指定共享对象中的定义,即使其他共享对象导出相同的符号也是如此。
您可以使程序使用运行时链接程序,从而允许在装入时恢复某些符号。 要创建使用运行时链接程序的程序,请使用 -brtl 选项链接该程序。 共享模块的链接方式影响符号的重新绑定。
您可以使用 -G 标志来构建已启用运行时链接的共享对象。 您可以通过使用 rtl_enable 命令重新链接现有共享对象来完全启用这些对象的运行时链接,除非这些对象已被除去。
符号可视性
输入对象文件中的全局符号和弱符号可以使用可视性符号进行标记。 定义了四种符号可视性。
| 符号 | 可视性 |
|---|---|
| 内部 | 未导出符号。 不能将符号的地址提供给其他程序或共享对象,但链接程序不会对此进行验证。 |
| 已隐藏 | 未导出符号。 |
| 受保护 | 该符号已导出,但无法反弹 (或被抢占) ,即使正在使用运行时链接也是如此。 |
| 已导出 | 符号随全局导出属性一起导出。 |
可以在汇编程序源文件中指定符号的可视性。 有些编译器也支持可视性。 有关详细信息,请查阅编译器文档。
还可以使用导出文件来指定符号的可视性。 通常,导出文件中指定的可视性优先于对象文件中指定的可视性。 为程序或共享对象创建导出列表时,此链接程序会考虑符号可视性。
导入和导出文件格式(-bI: 和 -bE: 标志)
导入或导出文件中的每一行均包含符号的名称,(可选)后跟地址或关键字。 主要关键字是 svc, svc32, svc3264, svc64, syscall, syscall32, syscall3264, syscall64, symbolic, nosymbolic, nosymbolic-, list, cm, bss, internal, hidden, protected, 和 export。 可与另一个关键字同时使用的其他关键字是 weak 和 required。
在导入文件中,指定一个地址时允许将符号映射至固定地址,如共享内存段中的地址。 您还可以使用其中一个关键字 cm, bss或 weak 来指定导入符号的存储类。 使用 autoexp 选项时,导入的符号的存储类会影响自动导出的符号。 如果在导入文件中指定了任意其他关键字,将忽略此关键字。
在导出文件中,可以在函数名之后使用 svc、svc32、svc3264、svc64、syscall、syscall32、syscall3264 或 syscall64 关键字来指示该函数是系统调用。 链接内核扩展时需要此选项。 如果输出文件不是内核扩展,那么这些关键字等价于 symbolic 关键字。
您可以使用 list 关键字来使符号在输出文件的装入程序部分中列出,尽管它未标记为导出的符号。 list 关键字可用于要在运行时处理某些符号的应用程序。 系统装入程序或运行时链接程序不会处理所列示的符号。
可以使用 symbolic, nosymbolic或 nosymbolic-keyword 使属性与导出的符号相关联。 会忽略导出文件中的符号地址。 在导出文件中,关键字 cm 和 bss 等价于 nosymbolic 关键字。 可以使用 internal, hidden, protected或 export 关键字来指定符号的可视性。 有关更多信息,请参阅导出符号的属性 。
weak 关键字可用于指定弱符号绑定,并且可以与另一个属性一起使用。
使用 required 关键字来验证符号是否已定义并且未导入。 对不满足这些条件的符号会输出一个错误。
ld 命令按下列准则处理导入和导出文件。
- 忽略空白行。
- 以 *(星号)开始的行是注释,可以忽略。
以 # (#,空格) 开头的行向 setopt 绑定程序子命令 (-bdbg:选项) 提供操作数。 例如,包含
# verbose的行会导致绑定程序在从文件中读取时列出每个符号。 当处理文件时,选项设置是活动的。 # 32 , # 64 , # no32和 # no64 选项可用于指定列出的符号是否必须用于 32 位链接和/或 64 位链接。- 32 位和 64 位导入文件选项
表 6.32 位和 64 位导入文件选项 项 描述 32 在导入或导出文件中使用此选项来指定在以 32 位方式进行链接时必须处理后续符号,但在以 64 位方式进行链接时忽略后续符号。 如果未指定 32 或 64 选项,所有符号将以 32 位和 64 位模式处理。 64 在导入或导出文件中使用此选项来指定在以 64 位方式进行链接时必须处理后续符号,但在以 32 位方式进行链接时忽略后续符号。 如果未指定 32 或 64 选项,那么将以 32 位和 64 位方式处理所有符号。 no32 或 no64 该选项覆盖先前的 32 或 64。 随后的符号以 32 位和 64 位模式处理。
- 处理导入文件时,以 #!(#,感叹号)开头的一行会提供与后续导入符号相关联的共享库名称。 该行可以出现多次,并适用于随后的符号,直到读到以 "
#!开头的下一行。 此文件名信息放在 XCOFF 对象文件的装入程序部分。 系统装入程序用于在执行期间定位适当的对象文件。 如果导入文件名是成员名 (ipath/ifile),则根据导入文件名和导入文件#!行的内容来确定放入装载器部分的文件名,如下所示:表 7. 导入文件中 " #!行的内容项 描述 #! 使用空路径、空文件、空数字。 系统装入器将此选项视为延迟导入。 #! () 使用 ipath,ifile和imember。 如果导入文件作为命令行中 InputFile 参数指定,可以使用此行。 在此情况下,文件必须以#!开头。 如果默认名称被其他#!行更改,也可以用这一行来恢复默认名称。#! path/文件 (成员) 使用指定路径、文件和成员。 #! 路径/文件 使用指定路径和文件以及空成员。 #! 文件 使用空路径、指定的文件和空成员。 运行时,搜索目录列表查找共享对象。 #! (成员) 使用 ipath,ifile和指定的成员。 运行时,搜索目录列表查找共享对象。#! 文件 (成员) 使用空路径以及指定的文件和成员。 运行时,搜索目录列表查找共享对象。 #! . (单个点) 此名称指的是主可执行文件。 当创建从不同名称的多个主程序导入符号的共享对象时使用此文件。 主程序必须导出由其他模块导入的符号,否则装入失败。 此导入文件名可以与运行时链接程序配合使用,也可以不与运行时链接程序配合使用。 #! .. (两个点)使用此文件名列出运行时链接器解析的符号。 使用此文件名创建程序使用的共享对象。 程序使用运行时链接器。 如果在未使用 rtllib 选项链接的程序中使用从 .. 导入符号的模块,这些符号将无法解析,对这些符号的引用将导致未定义的行为。
当使用-brtl 选项时,自动装入归档成员,如下创建导入文件。 如果 shr.so 是归档里的共享对象,创建一个导入文件:
# autoload
#! (shr.so)您可以在更多行上列出额外的成员名 (如果适用)。 您不需要在导入文件中列出符号名称,因为从 shr.so 导入的符号是从 shr.so 本身读取的。
有关创建共享库的更多信息,请参阅 create_shared_lib 子例程。 有关装入和绑定的更多信息,请参阅 load 子例程。
order_file format
使用 -border_file 标志时,在 order_file 格式文件中指定的符号将先于相同存储映射类别的其他符号进行映射。
<symbol-name> <white-space> <optional-smc-or-index> <white-space> <optional-object-module>以下是创建 order_file 格式文件的指导原则:
- 如果 order_file 格式文件中未提及可选的
<optional-smc-or-index>和<optional-object-module>字段,则<symbol-name>字段的指定值将作为全局名称。 - 一行开头的标签(
#)或星号(*)字符,或一行中任何地方的 "#或 "*"字符,如果前面有空格,则表示注释。 如果该行被识别为注释,则该行的其余部分将被忽略。 <symbol-name>字段的值可以包含除制表符、空格或换行符之外的任何字符。 但是,"<symbol-name>字段的值不得以 "#或 "*字符开头。<optional-smc-or-index>字段可以使用以下任何一个值:[<smc>]:"[<smc>]选项指定存储映射类。 存储映射类在 "/usr/include/syms.h文件中定义。 名为TC0的内容表 (TOC) 锚点不能用作存储映射类。%<number>:"%<number>选项指定一个符号表索引。
<optional-object-module>字段可以使用以下任何一个值:<<pathname>>:<pathname>选项指定 object_file 文件的路径。 路径名必须用 "<>括号括起来。<<pathname>(<member>)>>:"(<member>)选项指定一个存档成员。 档案成员名称必须用 "()括号括起来。 <pathname> ( <member> ) 的整个值必须用角括弧 (<>) 括起来。
对象模块名称不得包含开头角括号、结尾角括号、开头括号或结尾括号。 如果<pathname>的值以 "
/开头,那么路径名必须是绝对匹配的。 如果能找到唯一匹配的目录名,可以通过删除任意数量的前导目录名来缩短<pathname>的值。- 您可以指定一个连字符(
-)来指定一个未命名的符号。 如果在 <symbol-name> 字段中指定未命名的符号,则应确保使用<optional-smc-or-index>字段指定符号表索引,并使用<optional-object-module>字段指定 object_file 文件路径名。 - 如果未指定 "
<optional-smc-or-index>字段而指定了 "<optional-object-module>字段,则忽略 TOC 符号(TC 或 TE)。 - 如果指定了
<optional-smc-or-index>字段,但未指定<optional-object-module>字段,则只能为<optional-smc-or-index>字段指定[<smc>]选项。 在这种情况下,会选择由 "<symbol-name>字段指定的符号和指定的存储映射类别。 - 如果您指定了符号名称、符号表索引和 "
<optional-object-module>字段,并且符号表索引指向一个具有您指定的符号名称的符号,则该符号值将被选中。 - 为存储映射类别和 "
<optional-object-module>字段指定值时,会选择具有指定存储映射类别的符号。注意:永远无法选择 TOC 锚点。 - 如果所选符号未保存在输出文件中,则视为垃圾回收符号。 系统会忽略 "order_file格式文件中未保存在输出文件中的符号行。
.foo # Denotes a global symbol, probably a function.
.foo1 <obj1.o> # Denotes a symbol in obj1.o, but not a TOC symbol.
.foo2 <libxxx.a(maxi64.o)> # Denotes a symbol in an archive member, but not a TOC symbol.
var [TC] # Denotes the unique TOC symbol referring to a global variable.
foo1 [TC] <obj1.o> # Denotes the TOC symbol in obj1.o.
var2 %99 <obj2.o> # Denotes the symbol ‘var2’ with symbol table index 99 in obj2.o.
- %17 <obj3.o> # Denotes the unnamed symbol with symbol table index 17 in obj3.o.已导出符号的属性
使用运行时链接时,仅当使用正确的属性导出符号时,才能恢复对同一模块中符号的引用。 无法恢复对具有 symbolic 属性的符号的引用。 可以恢复对具有 nosymbolic 属性的符号的引用。 如果符号是变量,那么可以恢复对具有 nosymbolic- 属性的符号的引用。 对于函数符号,可以反弹使用函数指针的调用,而不能反弹直接函数调用。 nosymbolic- 属性是缺省值,提供此属性是为了与先前版本的操作系统兼容,但建议不要使用此属性。
如果您不是使用运行时链接程序,请避免使用 nosymbolic 属性,因为模块内函数调用是通过使用全局链接代码通过函数描述符间接进行的。 否则,导出符号的属性对与不使用运行时链接程序的程序配合使用的模块无效。
可以为导出文件中列出的符号指定显式导出属性。 大多数没有显式属性的符号是使用缺省导出属性导出的,如 symbolic, nosymbolic或 nosymbolic- 选项所指定。
如果在导出文件中列示的符号不带关键字,并且在输入文件中指定了符号的可视性,那么符号的可视性会加以保留。 可以使用 internal, hidden, protected或 export 关键字来覆盖输入符号的可视性。
weak 导出属性会在加载器部分用 L_WEAK 标记相关符号的映射类型。
导入的符号可能只有 weak 导出属性。 如果从另一个模块导入了符号,那么可以恢复对该符号的所有引用。 但是,如果在固定地址处导入符号,那么所有引用都将绑定到此固定地址,并且无法由运行时链接程序进行反弹。 系统装入程序必须解析延迟的导入。 运行时链接程序从不解析或重新绑定对延迟导入的引用。
对于非进口符号的出口,使用以下规则。
- 如果符号有 list 属性,将在装入程序部分符号表中列示,但不在符号表条目里设置 L_EXPORT 标志。 运行时链接程序将忽略此类符号。
- 如果导出的符号带有显式属性或显式可见性,则使用显式属性或可见性。
- 如果符号是 BSS 符号,那么将使用 nosymbolic 属性导出该符号。
- 否则,符号以全局属性导出,全局属性由 symbolic、nosymbolic 或 nosymbolic- 选项指定。 缺省全局属性是 nosymbolic-。
地址映射
ld 命令生成地址映射,列示输出对象文件里的符号布局。 如果使用 map(或 R)选项,在地址序列里每个部分的字符前首先列示未解析的符号和导入符号。 如果使用 calls(或 C)选项,列示的每个符号在从此符号到其他符号的引用之前。 如果使用 xref (或 X) 选项,那么列出的每个符号后跟来自其他符号的对该符号的引用的列表。 如果使用 smap, scalls或 sxref 选项,那么地址映射包含与 map, calls或 xref 选项列出的信息相同的信息,但符号按字母顺序列出。
存储类为 C_HIDEXT 的内部符号在输出时会使用字符 < 和 >(尖括号)将符号名称括起来。 使用存储类 C_EXT 的外部符号的名称将不带尖括号打印,而存储类为C_弱文本的符号将以字符 { 和 } 围绕符号名称打印。
列出了有关每个符号的以下信息:
- 符号是否是导入的、导出的或入口点的指示。 * (星号) 用于标记入口点, I 用于标记导入的符号, E 用于标记导出的符号。
- 地址(除导入符号以外)
- 长度和对齐方式(用于
CSECTs和 BSS 符号) - 存储映射类
- 符号类型
- 符号数(用作区分同名的符号)
- 符号名称
- 输入文件信息
存储映射类和符号类型定义在 /usr/include/syms.h 文件里。 在地址映射中,仅显示最后两个字符,但存储映射类 XMC_TC0 显示为 T0。
输入文件信息取决于输入文件类型。 对于对象文件,将列出从 C_FILE 符号表条目获取的源文件名称。 如果对象来自归档文件,对象文件按以下格式列示:
ArchiveFileName[ObjectName]
共享对象名称列在大括号 ({ }) 之间。如果共享对象是由导入文件定义的,则导入文件的名称会列在共享对象名称之前。
导入符号的符号类型为 ER,但有相关的文件输入信息。 未定义的符号与 ER 的符号类型列在一起,但除了符号数的所有其他列都为空。
-T 和 -D 标志 (或 pT 或 pD 选项) 会影响这些地址映射中打印的地址。 对于机器级调试,选择地址是有用的,这样符号就可以与它们在运行时具有的相同地址一同列示。 对于不使用专用装入的共享对象的 32 位程序,可以通过指定 -bpT:0x10000000 和 -bpD:0x20000000 选项来选择正确的地址。 缺省情况下,在 /etc/xlC.cfg 或 /etc/vac.cfg 文件中定义了这些选项。
环境变量
以下环境变量影响 ld 命令执行:
| 项 | 描述 |
|---|---|
| LIBPATH | 如果定义了 LIBPATH,使用它的值作为缺省库路径信息。 缺省库路径为 /usr/lib:/lib。 如果未指定 -L 标志且未指定 -blibpath 选项,那么将在输出文件的装入程序部分中写入缺省库路径信息。 不管指定的任意选项,当搜索命令行中指定的库时不使用 LIBPATH。 |
| TMPDIR | 如果输出文件存在或位于远程文件系统上,那么 ld 命令将生成临时输出文件。 将在 TMPDIR指定的目录中创建临时输出文件。 如果没有定义 TMPDIR,当输出文件是远程的或在与现有的输出文件同样的目录下时,临时输出文件创建在 /tmp下。 |
| OBJECT_MODE | 如果不使用 -b32 或 -b64 选项,则会检查 OBJECT_MODE 环境变量,以确定链接模式。 如果 OBJECT_MODE 的值为 32 或 64,那么将使用 32 位或 64 位方式。 如果值为 32_64 或任何其他值,那么链接程序将打印一条错误消息并以非零返回码退出。 否则,将使用 32 位方式。 |
示例
- 要链接多个对象文件并生成要在操作系统下运行的 a.out 文件,请输入以下命令:
-lc 命令链接 libc.a 库。 链接 libc.a 库的更简单方法是使用 cc 命令 (编译器) 来链接文件,如下所示:ld /usr/lib/crt0.o pgm.o subs1.o subs2.o -lccc pgm.o subs1.o subs2.o - 要指定输出文件的名称,请输入以下命令:
在文件 pgm 里创建输出。cc -o pgm pgm.o subs1.o subs2.o - 如果仅更改了对象文件 subs1.o ,要重新链接 pgm ,请输入以下命令:
最初来自对象文件 pgm.o 和 subs2.o 的cc -o pgm subs1.o pgmCSECTs将从文件 pgm 中读取。 如果程序由多个输入文件构成但仅有少数文件同时更改时此技术可以加速处理。 - 要与库子例程链接,请输入以下命令:
这将链接对象模块 pgm.o、 subs1.o 和 subs2.o、 mylib.a 存档中的子程序,以及 -l 标志指定的库中的子程序。 这意味着 /usr/lib/libtools.a 文件。cc pgm.o subs1.o subs2.o mylib.a -ltools - 要生成共享对象,请输入以下命令:
这将从由 -lc 标志指定的库 libc.a 链接对象文件 subs1.o, subs2.o和子例程。 它导出在文件 shrsub.exp 中指定的符号,并将链接的共享对象存储在文件 shrsub.o中。 -bM:SRE 在链接的对象文件中设置共享对象标志。ld -o shrsub.o subs1.o subs2.o -bE:shrsub.exp -bM:SRE -lc - 要与先前生成的共享对象 shrsub.o 链接,请输入以下命令:
这会将 pgm.o 对象文件与 shrsub.o 的已导出符号相链接。 链接的输出存储在 pgm 对象文件中。 -L '.' 会将当前目录添加至系统装入程序用来查找 shrsub.o 共享对象的库搜索路径。 在运行时,仅当从包含 shrsub.o 文件实例的目录运行此程序时,或者在 /usr/lib 标准库目录中找到 shrsub.o 文件时,才会装入此程序。 要允许从任何位置运行程序,请使用选项 -L `pwd`。cc -o pgm pgm.o shrsub.o -L '.'可以使用 dump 命令来查看系统装入器搜索的目录列表。
- 要通过将 libc.a 库用作非共享库来链接程序,请输入以下命令:
以必需的支持库来链接 pgm.o 并且命名输出文件 pgm。 对于 cc 命令, libc.a 库是一个必要的支持库,并作为共享库链接到用户的程序中。 在本例中, -bnso 选项指示 ld 命令将 libc.a 库作为非共享库链接。 -bI:/lib/syscalls.exp 命令指示 ld 命令导入内核或 /usr/lib/boot/unix 文件中包含的系统调用函数。 当使用 -bnso 选项进行链接时,共享对象中导入和导出或传递的符号必须明确导入。 本例中的 -bI:/lib/syscalls.exp 选项就是这样做的。cc -o pgm pgm.o -bnso -bI:/lib/syscalls.exp注: 每当 /usr/lib/libc.a 链接为非共享时,都必须使用标志 -bI:/lib/syscalls.exp 。 每当安装操作系统更新版本时,都必须重新链接应用程序。 静态链接的任何应用程序都不是从任何修订或发行版级别到任何其他修订或发行版级别的二进制可移植。
文件
| 项 | 描述 |
|---|---|
| /usr/bin/ld | 包含 ld 命令。 |
| /usr/lib/lib*.a | 指定用于链接程序的库。 |
| a.out | 指定缺省输出文件名。 |