英语法语德语意大利语葡萄牙语俄语西班牙语

OnWorks 网站图标

mips64-linux-gnuabi64-ld - 云端在线

在 OnWorks 免费托管服务提供商中通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器运行 mips64-linux-gnuabi64-ld

这是 mips64-linux-gnuabi64-ld 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

名称


ld - GNU 链接器

概要


ld [选项] 目标文件 ...

商品描述


ld 结合了许多目标文件和存档文件,重新定位它们的数据并捆绑符号
参考。 通常编译程序的最后一步是运行 ld.

ld 接受以 AT&T 链接编辑器超集编写的链接器命令语言文件
命令语言语法,提供对链接过程的显式和完全控制。

本手册页不描述命令语言; 见 ld 输入“信息”以获取完整信息
有关命令语言和 GNU 链接器其他方面的详细信息。

这个版本的 ld 使用通用 BFD 库来操作目标文件。 这个
允许 ld 读取、组合和写入多种不同格式的目标文件---对于
例如,COFF 或“a.out”。 不同的格式可以链接在一起以产生任何
可用类型的目标文件。

除了它的灵活性之外,GNU 链接器比其他链接器更有助于提供
诊断信息。 许多链接器在遇到错误时立即放弃执行
错误; 只要有可能, ld 继续执行,允许您识别其他错误
(或者,在某些情况下,尽管出现错误,但仍要获取输出文件)。

GNU 链接器 ld 旨在涵盖广泛的情况,并尽可能兼容
尽可能使用其他连接器。 因此,您有多种选择来控制其
行为。

配置


链接器支持大量的命令行选项,但在实际实践中很少
用于任何特定的上下文。 例如,经常使用 ld 是链接
标准的、受支持的 Unix 系统上的标准 Unix 目标文件。 在这样的系统上,
链接文件“hello.o”:

我愿意/lib/crt0.o hello.o -lc

这说明 ld 生成一个名为的文件 产量 作为链接文件的结果
"/lib/crt0.o" 带有 "hello.o" 和来自标准的库 "libc.a"
搜索目录。 (见讨论 -l 下面的选项。)

一些命令行选项 ld 可以在命令行中的任何位置指定。
但是,引用文件的选项,例如 -l or -T, 导致文件在
选项出现在命令行中的点,相对于目标文件和
其他文件选项。 用不同的参数重复非文件选项要么有
没有进一步的影响,或覆盖先前发生的事件(那些在命令左侧更远的
行)的那个选项。 可以多次有意义地指定的选项是
在下面的描述中指出。

非选项参数是要链接在一起的目标文件或档案。 他们
可以跟在、在命令行选项之前或与命令行选项混合在一起,除了目标文件
参数不能放在选项和它的参数之间。

通常至少用一个目标文件调用链接器,但您可以指定其他
使用二进制输入文件的形式 -l, -R,以及脚本命令语言。 如果 没有 二进制
输入文件被指定,链接器不产生任何输出,并发出
message 没有 输入 .

如果链接器无法识别目标文件的格式,它将假定它是一个
链接脚本。 以这种方式指定的脚本增强了用于
链接(默认链接器脚本或使用指定的链接器脚本) -T)。 这
功能允许链接器链接到一个看起来是一个对象或一个文件的文件
归档,但实际上只是定义了一些符号值,或者使用“INPUT”或“GROUP”来
加载其他对象。 以这种方式指定脚本只会增加主链接器
脚本,在主脚本之后放置额外的命令; 使用 -T 替换选项
完全默认链接器脚本,但请注意“INSERT”命令的效果。

对于名称为单个字母的选项,选项参数必须遵循
不带空格的选项字母,或作为单独的参数给出
紧跟在需要它们的选项之后。

对于名称为多个字母的选项,一个或两个破折号可以放在
选项名称; 例如, -跟踪符号--trace-symbol 是等价的。 注意---那里
是此规则的一个例外。 以小写“o”开头的多个字母选项
前面只能有两个破折号。 这是为了减少与 -o 选项。 所以
例如 -魔法 将输出文件名设置为 魔法--魔法 设置 NMAGIC
输出上的标志。

多字母选项的参数必须与选项名称分开
等号,或者在选项之后作为单独的参数给出
需要他们。 例如, --trace-symbol FOO--trace-symbol=foo 是等价的。
接受多字母选项名称的唯一缩写。

注意---如果链接器被间接调用,通过编译器驱动程序(例如 GCC) 然后
所有链接器命令行选项都应该以 -Wl, (或任何合适的
对于特定的编译器驱动程序)像这样:

gcc -Wl,--start-group foo.o bar.o -Wl,--end-group

这很重要,否则编译器驱动程序可能会默默地丢弃
链接器选项,导致链接错误。 传递选项时也可能出现混淆
需要通过驱动程序的值,因为在选项和参数之间使用空格
充当分隔符,并导致驱动程序仅将选项传递给链接器和
给编译器的参数。 在这种情况下,最简单的方法是使用两者的连接形式
单字母和多字母选项,例如:

gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map

以下是 GNU 链接器接受的通用命令行开关表:

@文件
从中读取命令行选项 文件. 读取的选项被插入代替
原来的 @文件 选项。 如果 文件 不存在或无法读取,则该选项
将按字面处理,而不是删除。

中的选项 文件 由空格分隔。 可以包含空格字符
通过用单引号或双引号将整个选项括在一个选项中。 任何
字符(包括反斜杠)可以通过在字符前加上前缀来包含
包含反斜杠。 这 文件 可能本身包含额外的@文件 选项; 任何
这些选项将被递归处理。

-a 关键词
支持此选项以实现 HP/UX 兼容性。 这 关键词 参数必须是其中之一
档案, 共用的,默认. -存档 在功能上等同于
-静态, 其他两个关键字在功能上等价于 -B动态。 这
选项可以使用任意次数。

- 审计 审计署
添加 审计署 到动态部分的“DT_AUDIT”条目。 审计署 未检查
为存在,也不会使用库中指定的 DT_SONAME。 如果指定
多次“DT_AUDIT”将包含以冒号分隔的审计接口列表
用。 如果链接器在搜索共享时发现带有审计条目的对象
库,它将在输出文件中添加相应的“DT_DEPAUDIT”条目。 这个
选项仅在支持 rtld-audit 接口的 ELF 平台上有意义。

-A 架构
--架构=架构
在当前发布的 ld, 此选项仅对 Intel 960 系列
架构。 在那里面 ld 配置, 架构 参数标识
960 系列中的特定架构,启用一些保护措施并修改
档案库搜索路径。

未来版本 ld 可能支持其他架构的类似功能
家庭。

-b 输入格式
--格式=输入格式
ld 可以配置为支持一种以上的目标文件。 如果你的 ld is
以这种方式配置,您可以使用 -b 用于指定输入的二进制格式的选项
在命令行上遵循此选项的目标文件。 即使当 ld 已配置
要支持替代对象格式,您通常不需要指定它,因为 ld
应该配置为默认输入格式,每个格式上最常用的格式
机。 输入格式 是一个文本字符串,支持的特定格式的名称
BFD 库。 (您可以列出可用的二进制格式 转储 -i.)

如果您使用不寻常的二进制文件链接文件,您可能需要使用此选项
格式。 你也可以使用 -b 显式切换格式(链接目标文件时
不同的格式),包括 -b 输入格式 在每组目标文件之前
以特定格式。

默认格式取自环境变量“GNUTARGET”。

您还可以使用命令“TARGET”从脚本定义输入格式;

-c MRI 命令文件
--mri-脚本=MRI 命令文件
为了与 MRI 产生的连接器兼容, ld 接受以
替代的、受限的命令语言,在 MRI 兼容脚本文件中描述
GNU ld 文档的部分。 使用选项引入 MRI 脚本文件 -c; 采用
练习 -T 运行以通用格式编写的链接器脚本的选项 ld 脚本
语。 如果 MRI-cmd文件 不存在, ld 在指定的目录中查找
通过任何 -L 选项​​。

-d
-直流
-dp 这三个选项是等效的; 支持多种形式以实现兼容性
与其他链接器。 即使可重定位的输出,它们也会为公共符号分配空间
文件被指定(与 -r)。 脚本命令“FORCE_COMMON_ALLOCATION”具有
一样的效果。

--depaudit 审计署
-P 审计署
添加 审计署 到动态部分的“DT_DEPAUDIT”条目。 审计署 是不是
检查是否存在,也不会使用库中指定的 DT_SONAME。 如果
多次指定“DT_DEPAUDIT”将包含以冒号分隔的审计列表
要使用的接口。 此选项仅在支持
rtld-审计接口。 -P 选项是为了与 Solaris 兼容而提供的。

-e 条目
--条目=条目
使用方法 条目 作为开始执行程序的显式符号,而不是
默认入口点。 如果没有符号命名 条目,链接器将尝试
解析 条目 作为一个数字,并将其用作入口地址(该数字将是
以 10 为基数解释; 你可以使用一个领先的 0x 为基数 16,或前导 0 为基地
8)。

--排除库 LIB,LIB,...
指定不应自动从中提取符号的归档库列表
出口。 库名称可以用逗号或冒号分隔。 指定
“--exclude-libs ALL”从自动导出中排除所有存档库中的符号。
此选项仅适用于链接器的 i386 PE 目标端口和 ELF
目标端口。 对于 i386 PE,在 .def 文件中明确列出的符号仍然是
导出,无论此选项如何。 对于 ELF 目标端口,受此影响的符号
选项将被视为隐藏。

--exclude-modules-for-implib 模块,模块,...
指定目标文件或归档成员的列表,不应从中删除符号
自动导出,但应批量复制到导入库中
在链接过程中生成。 模块名称可以用逗号或
冒号,并且必须与所使用的文件名完全匹配 ld 打开文件; 存档用
成员,这只是成员名称,但对于目标文件,列出的名称必须
包含并精确匹配用于指定链接器上的输入文件的任何路径
命令行。 此选项仅适用于 i386 PE 目标端口
链接器。 .def 文件中明确列出的符号仍会导出,无论
这个选项。

-E
--出口动态
--no-export-dynamic
创建动态链接的可执行文件时,使用 -E 选项还是
--出口动态 选项使链接器将所有符号添加到动态符号
桌子。 动态符号表是从动态可见的符号集
运行时的对象。

如果您不使用这些选项中的任何一个(或使用 --no-export-dynamic 选项
恢复默认行为),动态符号表通常只包含
链接中提到的某个动态对象引用的那些符号。

如果您使用“dlopen”加载需要引用符号的动态对象
由程序定义,而不是其他一些动态对象,那么你可能会
链接程序本身时需要使用此选项。

您还可以使用动态列表来控制应将哪些符号添加到
如果输出格式支持动态符号表。 见说明
--动态列表.

请注意,此选项特定于 ELF 目标端口。 PE目标支持类似的
从 DLL 或 EXE 导出所有符号的函数; 见描述
--export-all-symbols 联络一位教师

-EB 链接大端对象。 这会影响默认输出格式。

-EL 链接小端对象。 这会影响默认输出格式。

-f 姓名
--辅助=姓名
创建 ELF 共享对象时,将内部 DT_AUXILIARY 字段设置为
指定名称。 这告诉动态链接器共享的符号表
对象应该用作共享对象符号表上的辅助过滤器
姓名.

如果稍后针对此过滤器对象链接程序,则当您运行
程序,动态链接器将看到 DT_AUXILIARY 字段。 如果动态链接器
解析过滤器对象中的任何符号,它将首先检查是否存在
共享对象中的定义 姓名. 如果有,将使用它而不是
过滤器对象中的定义。 共享对象 姓名 不需要存在。 就这样
共享对象 姓名 可用于提供某些的替代实现
功能,可能用于调试或机器特定性能。

可以多次指定此选项。 将创建 DT_AUXILIARY 条目
按照它们在命令行中出现的顺序。

-F 姓名
--过滤器=姓名
创建 ELF 共享对象时,将内部 DT_FILTER 字段设置为指定的
姓名。 这告诉动态链接器共享对象的符号表
正在创建的应该用作共享对象符号表上的过滤器
姓名.

如果稍后针对此过滤器对象链接程序,则当您运行
程序,动态链接器将看到 DT_FILTER 字段。 动态链接器将
像往常一样根据过滤器对象的符号表解析符号,但它
实际上将链接到在共享对象中找到的定义 姓名。 就这样
过滤器对象可用于选择对象提供的符号的子集
姓名.

一些较旧的链接器使用 -F 整个编译工具链中的选项
为输入和输出目标文件指定目标文件格式。 GNU 链接器
为此目的使用其他机制: -b, - 格式, --oformat 选项,
链接器脚本中的“TARGET”命令和“GNUTARGET”环境变量。 GNU
链接器将忽略 -F 不创建 ELF 共享对象时的选项。

-fini=姓名
创建 ELF 可执行文件或共享对象时,在可执行文件或共享对象时调用 NAME
通过将 DT_FINI 设置为函数的地址来卸载共享对象。 经过
默认情况下,链接器使用“_fini”作为要调用的函数。

-g 忽略。 提供与其他工具的兼容性。

-G
--gpsize=
使用 GP 寄存器设置要优化的对象的最大大小为 尺寸。 这
仅对支持放置大文件的目标文件格式(例如 MIPS ELF)有意义
和小物体分成不同的部分。 对于其他目标文件,这将被忽略
格式。

-h 姓名
-soname=姓名
创建 ELF 共享对象时,将内部 DT_SONAME 字段设置为指定的
姓名。 当可执行文件与具有 DT_SONAME 字段的共享对象链接时,
然后当可执行文件运行时,动态链接器将尝试加载共享
由 DT_SONAME 字段指定的对象,而不是使用给定的文件名
链接器。

-i 执行增量链接(与选项相同 -r).

-初始化=姓名
创建 ELF 可执行文件或共享对象时,在可执行文件或共享对象时调用 NAME
通过将 DT_INIT 设置为函数的地址来加载共享对象。 经过
默认情况下,链接器使用“_init”作为调用函数。

-l 名称规格
--图书馆=名称规格
添加由指定的存档或目标文件 名称规格 到要链接的文件列表。
此选项可以使用任意次数。 如果 名称规格 是形式 :文档名称, ld
将在库路径中搜索名为的文件 文件名, 否则它将搜索
名为的文件的库路径 库名规范.a.

在支持共享库的系统上, ld 也可以搜索除
库名规范.a. 具体来说,在 ELF 和 SunOS 系统上, ld 将搜索目录
一个图书馆叫 libnamespec.so 在寻找一个叫 库名规范.a. (经过
约定,“.so”扩展名表示共享库。)请注意,此行为
不适用于 :文档名称,它总是指定一个名为 文件名.

链接器将只搜索一次存档,在它指定的位置
命令行。 如果存档定义了某个对象中未定义的符号
出现在命令行上的存档之前,链接器将包括
存档中的适当文件。 但是,对象中的未定义符号
稍后出现在命令行上不会导致链接器搜索存档
一次。

查看 -( 强制链接器多次搜索存档的方法的选项。

您可以在命令行上多次列出相同的存档。

这种类型的归档搜索是 Unix 链接器的标准。 然而,如果你是
运用 ld 在 AIX 上,请注意它与 AIX 链接器的行为不同。

-L 搜索目录
--库路径=搜索目录
添加路径 搜索目录 到路径列表 ld 将搜索档案库和
ld 控制脚本。 您可以多次使用此选项。 目录是
按照在命令行中指定的顺序进行搜索。 目录
在命令行中指定的搜索在默认目录之前。 全部 -L
选项适用于所有 -l 选项,无论选项出现的顺序如何。
-L 选项不影响如何 ld 搜索链接描述文件,除非 -T 选项是
指定的。

If 搜索目录 以“=”开头,则“=”将被替换为 系统根目录 字首,
由...控制 --sysroot 选项,或在配置链接器时指定。

搜索的默认路径集(未指定) -L) 取决于哪个
仿真模式 ld 正在使用,并且在某些情况下还取决于它的配置方式。

也可以使用“SEARCH_DIR”命令在链接脚本中指定路径。
在链接描述文件所在的位置搜索以这种方式指定的目录
出现在命令行中。

-m 仿真
模拟 仿真 链接器。 您可以使用以下命令列出可用的仿真
--详细 or -V 选项​​。

如果 -m 未使用选项,模拟取自“LDEMULATION”
环境变量(如果已定义)。

否则,默认仿真取决于链接器的配置方式。

-M
--打印地图
将链接映射打印到标准输出。 链接图提供有关
链接,包括以下内容:

· 目标文件映射到内存的位置。

· 如何分配公共符号。

· 链接中包含的所有档案成员,并提及该符号
导致存档成员被带入。

· 分配给符号的值。

注 - 其值由涉及一个表达式的表达式计算的符号
对同一符号的先前值的引用可能没有正确的结果
显示在链接地图中。 这是因为链接器丢弃了中间
结果,只保留表达式的最终值。 在这种情况下
在这种情况下,链接器将显示用方括号括起来的最终值。
因此,例如一个包含以下内容的链接描述文件:

富 = 1
富 = 富 * 4
富 = 富 + 8

将在链接映射中产生以下输出,如果 -M 使用选项:

0x00000001 富= 0x1
[0x0000000c] foo = (foo * 0x4)
[0x0000000c] foo = (foo + 0x8)

我们 表达式 有关链接描述文件中表达式的更多信息。

-n
--nmagic
关闭部分的页面对齐,并禁用针对共享库的链接。 如果
输出格式支持 Unix 风格的幻数,将输出标记为“NMAGIC”。

-N
--魔法
将文本和数据部分设置为可读可写。 另外,不要页面对齐
数据段,并禁用对共享库的链接。 如果输出格式
支持 Unix 风格的幻数,将输出标记为“OMAGIC”。 注意:虽然
PE-COFF 目标允许可写文本部分,它不符合
Microsoft 发布的格式规范。

--无魔法
此选项抵消了大部分效果 -N 选项。 它将文本部分设置为
是只读的,并强制数据段页面对齐。 注意 - 此选项确实
不启用针对共享库的链接。 用 -B动态 为了这。

-o 产量
--输出=产量
使用方法 产量 作为由制作的程序的名称 ld; 如果这个选项不是
指定,名称 默认使用。 脚本命令“OUTPUT”也可以
指定输出文件名。

-O 水平
If 水平 是大于零的数值 ld 优化输出。 这有可能
需要更长的时间,因此可能应该只为最终启用
二进制。 目前这个选项只影响 ELF 共享库的生成。 未来
链接器的版本可能会更多地使用此选项。 另外目前没有
对于此选项的不同非零值,链接器行为的差异。
同样,这可能会随着未来的版本而改变。

--推送状态
--推送状态 允许保留管理标志的当前状态
输入文件处理,以便它们都可以用一个对应的恢复
--pop 状态 选项。

涵盖的选项是: -B动态, -静态, -dn, -dy, -call_shared,
-非共享, -静态的, -N, -n, --整体存档, --no-whole-archive, -r, -乌尔,
--copy-dt-needed-entry, --no-copy-dt-needed-entry, --按需, --不需要的,
-a.

此选项的一个目标是规范 包配置. 当与
--库 选项列出所有可能需要的库,然后可能与
每时每刻。 最好返回如下内容:

-Wl,--push-state,--按需 -libone -libtwo -Wl,--pop-state

撤消 --push-state 的效果,恢复管理标志的先前值
输入文件处理。

-q
--emit-relocs
将重定位部分和内容保留在完全链接的可执行文件中。 发布链接
分析和优化工具可能需要这些信息才能执行正确的
可执行文件的修改。 这会导致更大的可执行文件。

此选项目前仅在 ELF 平台上受支持。

--force-动态
强制输出文件具有动态部分。 此选项特定于 VxWorks
的目标。

-r
--可重定位
生成可重定位的输出---即生成一个输出文件,该文件又可以作为
输入到 ld. 这通常被称为 部分的 链接. 作为副作用,在环境中
支持标准 Unix 幻数,此选项还设置输出文件的
幻数为“OMAGIC”。 如果未指定此选项,则为绝对文件
产生。 链接 C++ 程序时,此选项 没有 解析引用
构造器; 要做到这一点,请使用 -乌尔.

当输入文件与输出文件的格式不同时,部分链接
仅当该输入文件不包含任何重定位时才受支持。 不同的
输出格式可以有进一步的限制; 例如一些基于“a.out”的格式
根本不支持与其他格式的输入文件的部分链接。

此选项与 -i.

-R 文件名
--只是符号=文件名
从以下位置读取符号名称及其地址 文件名,但不要重新定位它或包括
它在输出中。 这允许您的输出文件象征性地引用绝对
其他程序中定义的内存位置。 您可以使用此选项超过
一旦。

为了与其他 ELF 链接器兼容,如果 -R 选项后跟一个目录
名称,而不是文件名,它被视为 -rpath 选项。

-s
--strip-all
省略输出文件中的所有符号信息。

-S
--strip-调试
从输出文件中省略调试器符号信息(但不是所有符号)。

-t
- 痕迹
将输入文件的名称打印为 ld 处理它们。

-T 脚本文件
--脚本=脚本文件
使用方法 脚本文件 作为链接器脚本。 此脚本替换 ld的默认链接器脚本
(而不是添加到它),所以 命令文件 必须指定一切必要的
描述输出文件。 如果 脚本文件 当前目录中不存在,
“ld”在任何前面指定的目录中查找它 -L 选项。 多种的
-T 选项累积。

-dT 脚本文件
--默认脚本=脚本文件
使用方法 脚本文件 作为默认链接器脚本。

此选项类似于 - 脚本 选项,除了脚本的处理是
延迟到处理完命令行的其余部分之后。 这允许
选项放置在 --默认脚本 命令行上的选项来影响
链接器脚本的行为,当链接器命令行
不能由用户直接控制。 (例如,因为命令行正在
由其他工具构建,例如 GCC).

-u 符号
--未定义=符号
符号 作为未定义符号输入到输出文件中。 这样做可能,
例如,触发标准库中附加模块的链接。 -u 也许
用不同的选项参数重复输入额外的未定义符号。 这个
选项等效于“EXTERN”链接描述文件命令。

如果此选项用于强制将其他模块拉入链接,
如果符号保持未定义是错误的,则该选项
--需要定义 应该改用。

--需要定义=符号
要求 符号 在输出文件中定义。 此选项与选项相同
- 不明确的 除了如果 符号 未在输出文件中定义,则链接器
将发出错误并退出。 在链接描述文件中可以达到同样的效果
一起使用“EXTERN”、“ASSERT”和“DEFINED”。 此选项可多次使用
需要额外符号的次数。

-乌尔 对于 C++ 程序以外的任何程序,此选项等效于 -r: 它产生
可重定位输出---即,一个输出文件,可以反过来作为输入 ld。 何时
链接 C++ 程序, -乌尔 解析对构造函数的引用,不像 -r. 它确实
无法使用 -乌尔 在本身链接的文件上 -乌尔; 一旦
构造函数表已经建好,不能再添加。 用 -乌尔 只为最后
部分链接,以及 -r 对于其他人。

--孤儿处理=MODE
控制如何处理孤立部分。 孤儿部分不是专门的
链接描述文件中提到。

MODE 可以具有以下任何值:

“地方”
按照策略将孤立部分放入合适的输出部分
描述于 孤儿 . 选项 - 独特的 也会影响部分的方式
放置。

“丢弃”
所有孤立部分都被丢弃,将它们放在 /丢弃/ 部分。

“警告”
链接器将像“放置”一样放置孤立部分并发出警告。

“错误”
如果找到任何孤立部分,链接器将退出并显示错误。

默认如果 --孤儿处理 没有给出的是“地方”。

--唯一[=部分]
为每个匹配的输入部分创建一个单独的输出部分 部分,或者
可选通配符 部分 对于每个孤立输入部分,缺少参数。 一个
孤立部分是链接描述文件中没有特别提及的部分。 你可以用这个
在命令行上多次选择; 它阻止输入的正常合并
具有相同名称的部分,覆盖链接描述文件中的输出部分分配。

-v
- 版
-V 显示版本号 ld。 该 -V 选项还列出了支持的仿真。

-x
--丢弃所有
删除所有局部符号。

-X
--discard-locals
删除所有临时局部符号。 (这些符号以系统特定的本地
标签前缀,通常 .L 对于 ELF 系统或 L 对于传统的 a.out 系统。)

-y 符号
--trace-symbol=符号
打印每个链接文件的名称 符号 出现。 可以给出这个选项
任意次数。 在许多系统上,必须在前面加上下划线。

当您的链接中有未定义的符号但不知道时,此选项很有用
引用来自哪里。

-Y
加入 到默认库搜索路径。 此选项适用于 Solaris
兼容性。

-z 关键词
公认的关键字是:

康布雷洛克
组合多个 reloc 部分并对其进行排序以进行动态符号查找
缓存可能。

定义
禁止在目标文件中使用未定义的符号。 共享中的未定义符号
图书馆仍然是允许的。

执行堆栈
将对象标记为需要可执行堆栈。

全球化
此选项仅在构建共享对象时才有意义。 它使
此共享对象定义的符号可用于符号解析
随后加载库。

初始化
此选项仅在构建共享对象时才有意义。 它标记对象
以便其运行时初始化将在运行时初始化之前发生
同时带入进程的任何其他对象。 同样的
对象的运行时终止将在运行时终止之后发生
任何其他对象。

插入
标记它的符号表在所有符号之前插入的对象,但
主要可执行文件。

懒惰
生成可执行或共享库时,标记它以告诉动态
将函数调用解析推迟到调用函数时的链接器
(延迟绑定),而不是在加载时。 延迟绑定是默认设置。

负载滤波器
将对象标记为在运行时立即处理其过滤器。

多重定义
允许多个定义。

诺康布雷洛克
禁用多个重定位部分组合。

nocopyreloc
禁用链接器生成的 .dynbss 变量代替定义的变量
共享库。 可能会导致动态文本重定位。

没有默认库
标记该对象搜索此对象的依赖项将忽略任何
默认库搜索路径。

节点
标记对象不应在运行时卸载。

节点打开
标记对象不可用于“dlopen”。

没有转储
标记对象不能被“dldump”转储。

没有执行堆栈
将对象标记为不需要可执行堆栈。

文本
将共享对象中的 DT_TEXTREL 视为错误。

备注
不要将共享对象中的 DT_TEXTREL 视为错误。

文本关闭
不要将共享对象中的 DT_TEXTREL 视为错误。

诺雷罗
不要在对象中创建 ELF "PT_GNU_RELRO" 段头。

联系 生成可执行或共享库时,标记它以告诉动态
链接器在程序启动时或共享时解析所有符号
库链接到使用 dlopen,而不是推迟函数调用解析
到第一次调用函数的时候。

起源
标记对象可能包含 $ORIGIN。

雷罗
在对象中创建一个 ELF“PT_GNU_RELRO”段头。

最大页面大小=
将仿真最大页面大小设置为 .

公共页面大小=
将仿真通用页面大小设置为 .

堆栈大小=
在 ELF“PT_GNU_STACK”段中指定堆栈大小。 指定零将
覆盖任何默认的非零大小的“PT_GNU_STACK”段创建。

结合
始终在 PLT 条目中生成 BND 前缀。 支持 Linux/x86_64。

noextern-protected-data
构建共享库时不要将受保护的数据符号视为外部符号。 这个
选项覆盖链接器后端默认值。 它可以用来解决不正确的
针对编译器生成的受保护数据符号的重定位。 更新于
另一个模块受保护的数据符号对结果共享不可见
图书馆。 支持 i386 和 x86-64。

call-nop=前缀地址
call-nop=前缀-nop
呼叫 nop = 后缀 nop
call-nop=前缀-字节
call-nop=suffix-字节
将间接调用转换为本地调用时指定 1 字节的“NOP”填充
定义的函数 foo,通过其 GOT 槽。 call-nop=前缀地址 生成“0x67
呼叫 foo”。 call-nop=前缀-nop 生成“0x90 调用 foo”。 呼叫 nop = 后缀 nop
生成“调用 foo 0x90”。 call-nop=前缀-字节 产生“字节 呼叫 富”.
call-nop=suffix-字节 生成“调用 foo 字节”. 支持 i386 和 x86_64。

出于 Solaris 兼容性考虑,其他关键字将被忽略。

-( 档案 -)
--开始组 档案 --结束组
档案 应该是存档文件列表。 它们可能是显式文件
姓名,或 -l 选项​​。

重复搜索指定的档案,直到没有新的未定义引用
创建。 通常,存档仅按指定的顺序搜索一次
在命令行上。 如果需要该存档中的符号来解析未定义的
归档中的对象引用的符号,稍后出现在命令行上,
链接器将无法解析该引用。 通过对档案进行分组,
它们都被重复搜索,直到所有可能的引用都被解析。

使用此选项会产生显着的性能成本。 最好只在以下情况下使用
两个或多个档案之间不可避免地存在循环引用。

--accept-unknown-input-arch
--no-accept-unknown-input-arch
告诉链接器接受其体系结构无法识别的输入文件。 这
假设是用户知道他们在做什么并且故意想要链接
在这些未知的输入文件中。 这是链接器的默认行为,之前
2.14 版。 从 2.14 版开始的默认行为是拒绝此类输入
文件,所以 --accept-unknown-input-arch 已添加选项以恢复旧的
行为。

--按需
--不需要的
此选项会影响命令中提到的动态库的 ELF DT_NEEDED 标签
之后的行 --按需 选项。 通常链接器会添加一个 DT_NEEDED 标签
命令行中提到的每个动态库,无论该库是否
实际上是否需要。 --按需 导致 DT_NEEDED 标签仅针对
一个图书馆 at in 练习 链接 满足非弱未定义符号
来自常规目标文件的引用,或者,如果在 DT_NEEDED 中找不到该库
其他所需库的列表,来自另一个的非弱未定义符号引用
需要的动态库。 出现在命令行上的目标文件或库 after
有问题的图书馆不影响图书馆是否被视为需要。 这是
类似于从档案中提取目标文件的规则。 --不需要的
恢复默认行为。

--添加需要
--无需添加
这两个选项已被弃用,因为它们的名称与
--按需--不需要的 选项。 它们已被替换
--copy-dt-needed-entry--no-copy-dt-needed-entry.

-断言 关键词
为了与 SunOS 兼容,将忽略此选项。

-B动态
-dy
-call_shared
链接动态库。 这仅在共享的平台上有意义
支持库。 此选项通常是此类平台上的默认设置。 这
此选项的不同变体是为了与各种系统兼容。 你可以
在命令行上多次使用此选项:它会影响库搜索
-l 跟随它的选项。

-B组
在动态部分的“DT_FLAGS_1”条目中设置“DF_1_GROUP”标志。 这个
导致运行时链接器处理此对象中的查找及其依赖项
仅在组内执行。 --unresolved-symbols=report-all 是暗示。 这个
选项仅在支持共享库的 ELF 平台上有意义。

-静态
-dn
-非共享
-静态的
不要链接共享库。 这仅在平台上有意义
支持共享库。 此选项的不同变体用于
与各种系统的兼容性。 您可以多次使用此选项
命令行:它影响库搜索 -l 跟随它的选项。 这个
选项还暗示 --unresolved-symbols=report-all. 此选项可用于
-共享. 这样做意味着正在创建一个共享库,但所有的
库的外部引用必须通过从静态中拉入条目来解决
库。

-Bsymbolic
创建共享库时,将对全局符号的引用绑定到定义
在共享库中(如果有)。 通常,程序链接可能
针对共享库覆盖共享库中的定义。 这个
选项也可以与 --出口动态 选项,在创建位置时
独立的可执行文件,将全局符号的引用绑定到定义中
可执行文件。 此选项仅在支持共享的 ELF 平台上有意义
库和位置无关的可执行文件。

-Bsymbolic-functions
创建共享库时,将对全局函数符号的引用绑定到
共享库中的定义(如果有)。 此选项也可以与
--出口动态 选项,在创建位置无关的可执行文件时,绑定
对可执行文件中定义的全局函数符号的引用。 这个
选项仅在支持共享库和位置的 ELF 平台上有意义
独立的可执行文件。

--动态列表=动态列表文件
为链接器指定动态列表文件的名称。 这通常用于
创建共享库以指定其引用的全局符号列表
不应绑定到共享库中的定义,或创建
动态链接的可执行文件以指定应添加到的符号列表
可执行文件中的符号表。 此选项仅在 ELF 平台上有意义
支持共享库。

动态列表的格式与版本节点相同,没有作用域和节点
姓名。 看 VERSION 获取更多信息.

--动态列表数据
将所有全局数据符号包括到动态列表中。

--dynamic-list-cpp-new
为 C++ 运算符 new 和 delete 提供内置动态列表。 主要是有用
用于构建共享 libstdc++。

--dynamic-list-cpp-typeinfo
为 C++ 运行时类型识别提供内置动态列表。

--检查部分
--no-check-sections
询问链接器 没有 在分配后检查部分地址,看看是否
有任何重叠。 通常链接器会执行这个检查,如果它发现
任何重叠都会产生合适的错误消息。 链接器确实知道,并且
确实允许覆盖中的部分。 可以恢复默认行为
通过使用命令行开关 --检查部分. 部分重叠通常不
检查可重定位链接。 在这种情况下,您可以使用
--检查部分 选项。

--copy-dt-needed-entry
--no-copy-dt-needed-entry
此选项影响对 DT_NEEDED 标签引用的动态库的处理
命令行中提到的 ELF 动态库。 通常链接器不会
为 DT_NEEDED 标签中提到的每个库的输出二进制文件添加一个 DT_NEEDED 标签
在输入动态库中。 和 --copy-dt-needed-entry 在命令中指定
行但是任何跟在它后面的动态库都会有它们的 DT_NEEDED 条目
添加。 可以使用以下命令恢复默认行为 --no-copy-dt-needed-entry.

此选项还会影响动态库中符号的分辨率。
--copy-dt-needed-entry 命令行上提到的动态库将是
递归搜索,跟随他们的 DT_NEEDED 标签到其他库,以便
解析输出二进制文件所需的符号。 但是在默认设置下
搜索跟随它的动态库将随着动态库停止
本身。 不会遍历 DT_NEEDED 链接来解析符号。

--cref
输出交叉引用表。 如果正在生成链接器映射文件,则交叉
参考表打印到地图文件。 否则打印在标准上
输出。

表格的格式特意简单,以便它可以很容易地处理
必要时编写脚本。 符号被打印出来,按名称排序。 对于每个符号,
给出了文件名列表。 如果定义了符号,则列出的第一个文件是
定义的位置。 如果符号被定义为一个公共值,那么任何文件
接下来出现这种情况。 最后,任何引用该符号的文件都是
上市。

--no-define-common
此选项禁止将地址分配给公共符号。 剧本
命令“INHIBIT_COMMON_ALLOCATION”具有相同的效果。

--no-define-common 选项允许分离分配地址的决定
常用符号从输出文件类型的选择; 否则不可重定位
输出类型强制为公共符号分配地址。 使用 --no-define-common
允许分配共享库中引用的公共符号
仅在主程序中寻址。 这消除了未使用的重复空间
共享库,并且还可以防止在解决错误时出现任何可能的混淆
当有许多具有专门搜索路径的动态模块时重复
运行时符号解析。

--defsym=符号=表达
在输出文件中创建一个全局符号,包含由给出的绝对地址
表达. 您可以根据需要多次使用此选项来定义多个
命令行中的符号。 支持有限形式的算术
表达 在这种情况下:您可以给出一个十六进制常数或一个名称
现有符号,或使用“+”和“-”添加或减去十六进制常量或
符号。 如果您需要更复杂的表达式,请考虑使用链接器命令
来自脚本的语言。 请注意: 之间不应该有空白 符号中,
等号 ("=“),以及 表达.

--demangle[=样式]
--no-demangle
这些选项控制是否在错误消息和其他
输出。 当链接器被告知去解码时,它会尝试在一个
可读方式:如果目标文件使用了前导下划线,则它会去除前导下划线
格式,并将 C++ 重整的符号名称转换为用户可读的名称。 不同的
编译器有不同的修改风格。 可选的 demangling 样式参数可以
用于为您的编译器选择合适的解压样式。 链接器将
默认情况下 demangle 除非环境变量 COLLECT_NO_DEMANGLE 设置。 这些
选项可用于覆盖默认值。

-I文件
--动态链接器=文件
设置动态链接器的名称。 这只有在生成时才有意义
动态链接的 ELF 可执行文件。 默认的动态链接器通常是正确的;
除非您知道自己在做什么,否则不要使用它。

--无动态链接器
生成可执行文件时,省略对要在以下位置使用的动态链接器的请求
加载时间。 这仅对包含动态的 ELF 可执行文件有意义
重定位,并且通常需要能够处理这些的入口点代码
搬迁。

--致命警告
--无致命警告
将所有警告视为错误。 可以使用选项恢复默认行为
--无致命警告.

--force-exe-后缀
确保输出文件具有 .exe 后缀。

如果成功构建的完全链接的输出文件没有“.exe”或“.dll”
后缀,此选项强制链接器将输出文件复制到同名文件之一
带有“.exe”后缀。 这个选项在使用未修改的 Unix makefiles 时很有用
Microsoft Windows 主机,因为某些版本的 Windows 不会运行映像,除非它
以“.exe”后缀结尾。

--gc-sections
--no-gc-sections
启用未使用的输入节的垃圾收集。 它在执行的目标上被忽略
不支持这个选项。 默认行为(不执行此垃圾
集合)可以通过指定来恢复 --no-gc-sections 在命令行上。 笔记
支持 COFF 和 PE 格式目标的垃圾收集,但是
实施目前被认为是试验性的。

--gc-sections 通过检查符号来决定使用哪些输入部分
搬迁。 包含入口符号的部分和所有包含
命令行上未定义的符号将被保留,包含的部分也将被保留
动态对象引用的符号。 请注意,在构建共享库时,
链接器必须假定引用了任何可见符号。 一旦这组初始
节已确定,链接器递归地将任何节标记为已使用
由他们的重定位引用。 看 - 入口- 不明确的.

执行部分链接时可以设置此选项(使用选项启用 -r)。 在这个
如果保留的符号的根必须由一个显式指定 - 入口 or
- 不明确的 选项或通过链接描述文件中的“ENTRY”命令。

--print-gc-sections
--no-print-gc-sections
列出垃圾收集删除的所有部分。 该列表打印在 stderr 上。
此选项仅在通过
--gc-sections) 选项。 默认行为(不列出部分
删除)可以通过指定恢复 --no-print-gc-sections 在命令行上。

--打印输出格式
打印默认输出格式的名称(可能受其他命令行的影响)
选项)。 这是将出现在“OUTPUT_FORMAT”链接器脚本中的字符串
命令。

--打印内存使用
打印使用的大小、总大小和使用大小的内存区域创建的 记忆
命令。 这对于嵌入式目标很有用,可以快速查看免费数量
记忆。 输出格式每个区域有一个标题和一行。 这是
人类可读且易于被工具解析。 下面是一个输出示例:

内存区域已用大小区域大小已使用百分比
ROM:256 KB 1 MB 25.00%
内存:32 B 2 GB 0.00%

- 帮帮我
在标准输出上打印命令行选项的摘要并退出。

--目标帮助
在标准输出上打印所有目标特定选项的摘要并退出。

-地图=地图文件
打印到文件的链接映射 地图文件. 见说明 -M 选项,以上。

--无保留内存
ld 通常通过缓存符号表来优化内存使用速度
内存中的输入文件。 这个选项告诉 ld 改为优化内存使用,通过
必要时重读符号表。 这可能是必需的,如果 ld 用完了
链接大型可执行文件时的内存空间。

--no-未定义
-z 定义
报告来自常规目标文件的未解析符号引用。 这样做即使
链接器正在创建一个非符号共享库。 开关
--[no-]allow-shlib-undefined 控制报告未解决的行为
在被链接的共享库中找到的引用。

--allow-multiple-definition
-z 多重定义
通常当一个符号被定义多次时,链接器会报告一个致命的
错误。 这些选项允许多个定义,并且将使用第一个定义。

--allow-shlib-未定义
--no-allow-shlib-未定义
允许或禁止共享库中未定义的符号。 这个开关类似于
--no-未定义 除了它确定未定义符号时的行为
在共享库而不是常规目标文件中。 它不影响如何
处理常规目标文件中的未定义符号。

默认行为是报告中引用的任何未定义符号的错误
共享库,如果链接器用于创建可执行文件,但允许
如果链接器用于创建共享库,则使用它们。

在指定的共享库中允许未定义符号引用的原因
链接时间是:

· 链接时指定的共享库可能与链接时指定的共享库不同。
在加载时可用,因此符号实际上可能在加载时可解析。

· 有一些操作系统,例如 BeOS 和 HPPA,其中未定义的符号
共享库是正常的。

例如,BeOS 内核在加载时修补共享库以选择
哪个功能最适合当前架构。 这是
例如,用于动态选择合适的 memset 函数。

--no-undefined-version
通常当一个符号有一个未定义的版本时,链接器会忽略它。 这个
选项不允许使用未定义版本的符号,并会发出致命错误
代替。

--default-symver
为未版本控制的导出符号创建并使用默认符号版本(soname)。

--default-imported-symver
为未版本化的导入符号创建并使用默认符号版本(soname)。

--no-warn-mismatch
通常情况下 ld 如果您尝试将输入文件链接在一起,则会出现错误
由于某种原因不匹配,也许是因为它们是为不同的
处理器或不同的字节序。 这个选项告诉 ld 它应该
默默地允许这种可能的错误。 此选项应谨慎使用,在
当您采取了一些特殊措施以确保链接器错误是
不合适的。

--no-warn-search-mismatch
通常情况下 ld 如果在库期间发现不兼容的库,将发出警告
搜索。 此选项使警告静音。

--no-whole-archive
关闭效果 --整体存档 用于后续存档文件的选项。

--noinhibit-exec
只要它仍然可用,就保留可执行输出文件。 通常,链接器
如果在链接过程中遇到错误,则不会产生输出文件; 它
当它发出任何错误时退出而不写入输出文件。

-nostdlib
仅搜索在命令行上明确指定的库目录。 图书馆
链接描述文件中指定的目录(包括在
命令行)被忽略。

--oformat=输出格式
ld 可以配置为支持一种以上的目标文件。 如果你的 ld is
以这种方式配置,您可以使用 --oformat 指定二进制格式的选项
输出目标文件。 即使当 ld 配置为支持替代对象
格式,您通常不需要指定它,因为 ld 应该配置为产生
作为默认输出格式,每台机器上最常用的格式。 输出格式
文本字符串,BFD 库支持的特定格式的名称。 (你可以
列出可用的二进制格式 转储 -i.) 脚本命令
“OUTPUT_FORMAT”也可以指定输出格式,但是这个选项会覆盖它。

-馅饼
--pic-可执行文件
创建一个位置无关的可执行文件。 目前仅在 ELF 上支持
平台。 位置无关的可执行文件类似于共享库,因为
它们被动态链接器重定位到操作系统选择的虚拟地址
它们(可能因调用而异)。 像普通的动态链接的可执行文件
它们可以被执行并且在可执行文件中定义的符号不能被覆盖
共享库。

-qmagic
出于 Linux 兼容性考虑,将忽略此选项。

-Qy 出于 SVR4 兼容性考虑,将忽略此选项。

- 放松
--不放松
具有机器相关效果的选项。 仅少数支持此选项
的目标。

在某些平台上 - 放松 选项执行特定于目标的全局优化
当链接器解析程序中的寻址时,这成为可能,例如
放宽地址模式,合成新指令,选择较短版本的
当前指令,并结合常数值。

在某些平台上,这些链接时间全局优化可能会进行符号调试
由此产生的可执行文件是不可能的。 众所周知,松下就是这种情况
MN10200 和 MN10300 系列处理器。

在不支持此功能的平台上, - 放松 被接受,但被忽略。

在平台上 - 放松 被接受的选项 --不放松 可用于禁用
功能。

--保留符号文件=文件名
保留 仅由 文件中列出的符号 文件名,丢弃所有其他人。 文件名
只是一个平面文件,每行有一个符号名称。 这个选项特别
在有大型全局符号表的环境(例如 VxWorks)中很有用
逐渐累积,以节省运行时内存。

--retain-symbols-文件没有 丢弃未定义的符号,或所需的符号
搬迁。

您只能指定 --retain-symbols-文件 一次在命令行中。 它覆盖 -s
-S.

-rpath=DIR
将目录添加到运行时库搜索路径。 这在链接 ELF 时使用
与共享对象的可执行文件。 全部 -rpath 参数被连接并传递给
运行时链接器,它在运行时使用它们来定位共享对象。 这 -rpath
定位共享对象所需的共享对象时也使用该选项
明确包含在链接中; 见说明 -rpath-链接 选项。 如果
-rpath 链接 ELF 可执行文件时不使用,环境的内容
如果定义了变量“LD_RUN_PATH”,则将使用它。

-rpath 选项也可用于 SunOS。 默认情况下,在 SunOS 上,链接器将
形成一个运行时搜索路径 -L 它给出的选项。 如果一个 -rpath 选项
使用时,运行时搜索路径将专门使用 -rpath 期权,
忽略 -L 选项。 这在使用 gcc 时很有用,它增加了许多 -L
可能位于 NFS 挂载文件系统上的选项。

为了与其他 ELF 链接器兼容,如果 -R 选项后跟一个目录
名称,而不是文件名,它被视为 -rpath 选项。

-rpath-链接=DIR
使用 ELF 或 SunOS 时,一个共享库可能需要另一个。 这发生在
“ld -shared”链接包括一个共享库作为输入文件之一。

当链接器在做非共享、不可重定位的时候遇到这样的依赖
链接,它会自动尝试定位所需的共享库并包含它
在链接中,如果它没有明确包含。 在这种情况下, -rpath-链接 选项
指定要搜索的第一组目录。 这 -rpath-链接 选项可以指定
一个目录名称序列,或者通过指定由分隔符分隔的名称列表
冒号,或多次出现。

应谨慎使用此选项,因为它会覆盖可能具有的搜索路径
被硬编译成共享库。 在这种情况下,可以使用
无意中与运行时链接器所做的搜索路径不同。

链接器使用以下搜索路径来定位所需的共享库:

1. 指定的任何目录 -rpath-链接 选项​​。

2. 指定的任何目录 -rpath 选项。 和...之间的不同 -rpath
-rpath-链接 是由指定的目录 -rpath 选项包含在
可执行并在运行时使用,而 -rpath-链接 选项仅有效
在链接时。 搜索 -rpath 这种方式仅由本机链接器支持,并且
已配置的交联剂 --with-sysroot 选项。

3. 在 ELF 系统上,对于本机链接器,如果 -rpath-rpath-链接 选项是
未使用,搜索环境变量“LD_RUN_PATH”的内容。

4. 在 SunOS 上,如果 -rpath 未使用选项,搜索指定的任何目录
运用 -L 选项​​。

5.对于本地链接器,搜索环境变量的内容
“LD_LIBRARY_PATH”。

6. 对于本机 ELF 链接器,共享的“DT_RUNPATH”或“DT_RPATH”中的目录
library 被搜索它需要的共享库。 “DT_RPATH”条目是
如果存在“DT_RUNPATH”条目,则忽略。

7.默认目录,通常 / lib目录/ usr / lib目录.

8. 对于 ELF 系统上的本地链接器,如果文件 /etc/ld.so.conf 存在,列表
在该文件中找到的目录。

如果未找到所需的共享库,链接器将发出警告并
继续链接。

-共享
-B可共享
创建共享库。 目前仅在 ELF、XCOFF 和 SunOS 上支持
平台。 在 SunOS 上,链接器将自动创建一个共享库,如果 -e
未使用选项并且链接中有未定义的符号。

--sort-common
--sort-common=升序
--sort-common=降序
这个选项告诉 ld 按升序排列对常用符号进行排序或
将它们放在适当的输出部分时按降序排列。 符号
考虑的对齐是十六字节或更大、八字节、四字节、两字节和
一字节。 这是为了防止由于对齐约束而导致符号之间出现间隙。 如果不
指定排序顺序,然后假定降序。

--sort-section=名称
此选项将“SORT_BY_NAME”应用于链接器中的所有通配符部分模式
脚本。

--sort-section=对齐
此选项将“SORT_BY_ALIGNMENT”应用于
链接脚本。

--按文件分割[=尺寸]
--reloc 拆分 但在以下情况下为每个输入文件创建一个新的输出部分
尺寸 到达了。 尺寸 如果未给出,则默认大小为 1。

--重新定位分割[=]
尝试在输出文件中创建额外的部分,以便在
该文件包含超过 搬迁。 这在生成巨大的时很有用
使用 COFF 对象下载到某些实时内核的可重定位文件
文件格式; 因为 COFF 不能在单个
部分。 请注意,这将无法与不支持的目标文件格式一起使用
支持任意部分。 链接器不会拆分单个输入部分
用于重新分配,因此如果单个输入部分包含多个 搬迁
一个输出部分将包含许多重定位。 默认值为
32768.

--统计
计算并显示有关链接器操作的统计信息,例如执行
时间和内存使用情况。

--sysroot=目录
使用方法 目录 作为 sysroot 的位置,覆盖配置时间默认值。
此选项仅受使用配置的链接器支持 --with-sysroot.

--传统格式
对于某些目标,输出 ld 在某些方面与某些输出不同
现有的链接器。 此开关请求 ld 改为使用传统格式。

例如,在 SunOS 上, ld 组合符号串表中的重复条目。 这个
可以将包含完整调试信息的输出文件的大小减少 30 以上
百分。 不幸的是,SunOS“dbx”程序无法读取生成的程序
(“gdb”没有问题)。 这 --传统格式 开关告诉 ld 不结合
重复条目。

--section-start=部分名称=组织结构
在输出文件中由给出的绝对地址定位一个部分 组织结构。 You may use您可以使用
根据需要多次使用此选项以在命令中定位多个部分
线。 组织结构 必须是单个十六进制整数; 为了与其他链接器兼容,
你可以省略前导 0x 通常与十六进制值相关联。 请注意: 那里
之间应该没有空格 部分名称, 等号 ("=“),以及 组织结构.

-Tbss=组织结构
-Tdata=组织结构
-文本=组织结构
与...一样 --section-开始, 以“.bss”、“.data”或“.text”作为 部分名称.

-Ttext-segment=组织结构
创建 ELF 可执行文件时,它将设置文本的第一个字节的地址
分割。

-Trodata 段=组织结构
为只读数据所在的目标创建 ELF 可执行文件或共享对象时
在与可执行文本分开的自己的段中,它将设置地址
只读数据段的第一个字节。

-Tldata-段=组织结构
在为 x86-64 中型内存模型创建 ELF 可执行文件或共享对象时,它
将设置 ldata 段的第一个字节的地址。

--unresolved-symbols=方法
确定如何处理未解析的符号。 有四种可能的值
方法:

忽略所有
不要报告任何未解析的符号。

全部报告
报告所有未解析的符号。 这是默认设置。

忽略对象文件
报告共享库中包含的未解析符号,但忽略它们
如果它们来自常规目标文件。

忽略共享库
报告来自常规目标文件的未解析符号,但在以下情况下忽略它们
它们来自共享库。 这在创建动态时很有用
二进制文件,并且已知它应该引用的所有共享库
包含在链接器的命令行中。

共享库本身的行为也可以由
--[no-]allow-shlib-undefined 选项。

通常,链接器会为每个报告的未解析符号生成错误消息
但选项 --warn-unresolved-symbols 可以将其更改为警告。

--dll-详细
--详细[=NUMBER]
显示版本号 ld 并列出支持的链接器仿真。 展示
哪些输入文件可以打开,哪些不能打开。 显示正在使用的链接描述文件
链接器。 如果可选 NUMBER 参数 > 1,插件符号状态也将是
显示。

--version-脚本=版本脚本文件
为链接器指定版本脚本的名称。 这通常用于
创建共享库以指定有关版本的附加信息
正在创建的库的层次结构。 此选项仅在 ELF 上完全支持
支持共享库的平台; 看 VERSION. 它部分支持
PE 平台,可以使用版本脚本来过滤自动导出中的符号可见性
模式:任何标记的符号 本地 在版本脚本中将不会被导出。

--warn-common
当一个公共符号与另一个公共符号或一个符号组合时发出警告
定义。 Unix 链接器允许这种有点草率的做法,但某些链接器
其他操作系统没有。 此选项可让您发现潜在问题
从组合全局符号。 不幸的是,一些 C 库使用这种做法,所以
您可能会收到一些关于库和程序中符号的警告。

共有三种全局符号,此处以 C 示例说明:

INT i = 1;
一个定义,位于输出文件的初始化数据部分。

外部 INT i;
未定义的引用,不分配空间。 必须有一个
某处变量的定义或通用符号。

INT i;
一个常见的符号。 如果一个变量只有(一个或多个)公共符号,
它进入输出文件的未初始化数据区。 链接器合并
将同一变量的多个公共符号合并为一个符号。 如果它们是
不同的尺寸,它选择最大的尺寸。 链接器变成一个公共符号
进入声明,如果有相同变量的定义。

--warn-common 选项可以产生五种警告。 每个警告包括
一对行:第一行描述刚刚遇到的符号,第二行
描述以前遇到的同名符号。 两者之一或两者
符号将是一个常见的符号。

1. 把常用符号变成引用,因为已经有了定义
为符号。

( ): 警告: 常见的` '
被定义覆盖
( ): 警告: 此处定义

2. 把一个公共符号变成一个引用,因为后面的定义
遇到符号。 这与前面的情况相同,不同之处在于
符号以不同的顺序遇到。

( ): 警告: ` 的定义'
压倒一切的
( ):警告:common is here

3. 将公共符号与先前相同大小的公共符号合并。

( ): 警告: 多个共同点
的` '
( ): 警告: 以前的共同点在这里

4. 将公共符号与先前较大的公共符号合并。

( ): 警告: 常见的` '
被更大的公共覆盖
( ): 警告: 更大的共同点在这里

5. 将公共符号与先前较小的公共符号合并。 这是一样的
与前一种情况一样,除了符号在不同的
秩序。

( ): 警告: 常见的` '
覆盖较小的共同点
( ): 警告: 更小的common is here

--warn-构造函数
警告是否使用了任何全局构造函数。 这仅对少数目标文件有用
格式。 对于像 COFF 或 ELF 这样的格式,链接器无法检测到使用 global
构造器。

--warn-multiple-gp
如果输出文件中需要多个全局指针值,则发出警告。 这只是
对某些处理器有意义,例如 Alpha。 具体来说,一些处理器
将大值常量放在一个特殊的部分。 一个特殊的寄存器(全球
指针)指向本节的中间,以便可以加载常量
有效地通过基址寄存器相对寻址模式。 由于基数偏移
寄存器相对模式是固定的并且相对较小(例如 16 位),这限制了
常量池的最大大小。 因此,在大型程序中,往往需要
使用多个全局指针值以便能够解决所有可能的问题
常数。 每当发生这种情况时,此选项都会导致发出警告。

--警告一次
只为每个未定义的符号警告一次,而不是每个模块一次
它。

--warn-section-align
如果输出节的地址因对齐而改变,则发出警告。 通常,
对齐方式将由输入部分设置。 地址只会在以下情况下更改
没有明确规定; 也就是说,如果“SECTIONS”命令没有指定开始
该部分的地址。

--warn-shared-textrel
如果链接器将 DT_TEXTREL 添加到共享对象,则发出警告。

--warn-alternate-em
警告对象是否具有备用 ELF 机器代码。

--warn-unresolved-symbols
如果链接器将报告未解析的符号(请参阅选项
--未解决的符号) 它通常会产生一个错误。 这个选项使它
而是生成警告。

--error-unresolved-symbols
这将恢复链接器在报告时生成错误的默认行为
未解决的符号。

--整体存档
对于在命令行上提到的每个存档 --整体存档 选项,
在链接中包含存档中的每个目标文件,而不是搜索
存档所需的目标文件。 这通常用于打开存档文件
进入共享库,强制每个对象都包含在生成的共享库中
图书馆。 此选项可以多次使用。

从 gcc 使用此选项时的两个注意事项:首先,gcc 不知道此选项,
所以你必须使用 -Wl,-整体存档. 二、不要忘记使用
-Wl,-no-whole-archive 在您的档案列表之后,因为 gcc 会添加它自己的列表
的档案链接到您的链接,您可能不希望此标志也影响这些。

--包裹=符号
使用包装函数 符号. 任何未定义的引用 符号 将得到解决
到“__包裹_象征”. 任何未定义的对“__real_”的引用象征” 将被解决
符号.

这可用于为系统功能提供包装器。 包装函数
应该被称为“__wrap_象征”. 如果它想调用系统函数,它应该
呼叫“__real_象征”.

这是一个简单的例子:

空白 *
__wrap_malloc (size_t c)
{
printf ("用 %zu\n 调用 malloc", c);
返回 __real_malloc (c);
}

如果您使用此文件链接其他代码 - 裹 分配,然后所有调用“malloc”
将调用函数“__wrap_malloc”。 对“__real_malloc”的调用
“__wrap_malloc”将调用真正的“malloc”函数。

您可能还希望提供一个“__real_malloc”函数,以便链接没有
- 裹 选项会成功。 如果你这样做,你不应该把定义
“__real_malloc”与“__wrap_malloc”在同一个文件中; 如果你这样做,汇编器可能会
在链接器有机会将其包装为“malloc”之前解决调用。

--eh-frame-hdr
请求创建“.eh_frame_hdr”部分和ELF“PT_GNU_EH_FRAME”段头。

--no-ld-generated-unwind-info
请求为链接器生成的代码部分创建“.eh_frame”展开信息,例如
血小板。 如果支持链接器生成的展开信息,则默认情况下启用此选项。

--enable-new-dtags
--disable-new-dtags
这个链接器可以在 ELF 中创建新的动态标签。 但较旧的 ELF 系统可能不会
了解他们。 如果您指定 --enable-new-dtags,新的动态标签将是
根据需要创建,旧的动态标签将被省略。 如果您指定
--disable-new-dtags,不会创建新的动态标签。 默认情况下,新动态
没有创建标签。 请注意,这些选项仅适用于 ELF 系统。

--哈希大小=
将链接器哈希表的默认大小设置为接近于的素数 .
增加这个值可以减少链接器执行它的时间长度
任务,以增加链接器的内存要求为代价。 相似地
减小此值可以以牺牲速度为代价来减少内存需求。

--哈希样式=样式
设置链接器哈希表的类型。 样式 可以是经典 ELF 的“sysv”
“.hash”部分,“gnu”代表新风格 GNU “.gnu.hash”部分或“both”
经典的 ELF ".hash" 和新风格的 GNU ".gnu.hash" 哈希表。 默认值为“sysv”。

--compress-debug-sections=none
--compress-debug-sections=zlib
--compress-debug-sections=zlib-gnu
--compress-debug-sections=zlib-gabi
在 ELF 平台上,这些选项控制 DWARF 调试部分如何使用
zlib。 --compress-debug-sections=none 不压缩 DWARF 调试部分。
--compress-debug-sections=zlib-gnu 压缩 DWARF 调试部分并重命名调试
部分名称开头 .zdebug 而不是 .调试. --compress-debug-sections=zlib
--compress-debug-sections=zlib-gabi 压缩 DWARF 调试部分
来自 ELF ABI 的 SHF_COMPRESSED。 默认行为取决于
涉及的目标和用于构建工具链的配置选项。 默认的
可以通过检查链接器的输出来确定 - 帮帮我 选项。

--减少内存开销
此选项减少了 ld 运行时的内存需求,但代价是链接
速度。 引入这个是为了为链接映射文件选择旧的 O(n^2) 算法
代,而不是新的 O(n) 算法使用大约 40% 以上的内存
符号存储。

该开关的另一个作用是将默认哈希表大小设置为 1021,即
再次以延长链接器运行时间为代价来节省内存。 这没有完成
但是如果 --哈希大小 开关已被使用。

--减少内存开销 开关也可用于实现其他权衡
链接器的未来版本。

--build-id
--build-id=样式
请求创建“.note.gnu.build-id”ELF 注释部分或“.buildid”COFF
部分。 注释的内容是标识此链接文件的唯一位。
样式 可以是“uuid”以使用 128 个随机位,“sha1”以使用 160 位 SHA1 散列对
输出内容的规范部分,“md5”使用 128 位 MD5 散列对
输出内容的规范部分,或“0x十六进制字符串" 使用选定的位串
指定为偶数个十六进制数字(“-”和“:”之间的字符
数字对被忽略)。 如果 样式 省略,使用“sha1”。

“md5”和“sha1”样式产生的标识符在
相同的输出文件,但在所有不同的输出文件中将是唯一的。 这是
不打算作为文件内容的校验和进行比较。 链接的文件可能
稍后由其他工具更改,但标识原始的构建 ID 位字符串
链接文件不会改变。

传递“无” 样式 从之前的任何“--build-id”选项中禁用设置
命令行。

i386 PE 链接器支持 -共享 选项,这会导致输出为
动态链接库 (DLL) 而不是普通的可执行文件。 你应该命名
使用此选项时输出“*.dll”。 此外,链接器完全支持
标准的“*.def”文件,可以像对象一样在链接器命令行上指定
文件(实际上,它应该在从中导出符号的档案之前,以确保它们获得
链接,就像一个普通的目标文件)。

除了所有目标通用的选项外,i386 PE 链接器还支持额外的
特定于 i386 PE 目标的命令行选项。 取值的选项
可以用空格或等号与它们的值分开。

--add-stdcall-alias
如果给定,带有 stdcall 后缀 (@nn) 将按原样导出,也将与
去掉后缀。 [此选项特定于链接器的 i386 PE 目标端口]

--基本文件 文件
使用方法 文件 作为一个文件的名称,其中保存所有的基地址
生成 DLL 所需的重定位 dll工具. [这是一个 i386 PE 特定的
选项]

--dll
创建一个 DLL 而不是常规的可执行文件。 你也可以使用 -共享 或指定一个
给定“.def”文件中的“LIBRARY”。 [此选项特定于 i386 PE 目标
链接器的端口]

--enable-long-section-names
--disable-long-section-names
COFF 对象格式的 PE 变体添加了一个扩展,允许使用
节名称长度超过 XNUMX 个字符,这是 COFF 的正常限制。 默认情况下,
这些名称只允许在目标文件中,因为完全链接的可执行映像不
携带支持较长名称所需的 COFF 字符串表。 作为 GNU 扩展,
也可以允许它们在可执行映像中使用,或者(可能)
毫无意义!)通过使用这两个选项在目标文件中禁止它。 可执行
用这些长的部分名称生成的图像有点不标准,作为
他们做一个字符串表,并且在使用非 GNU 进行检查时可能会产生令人困惑的输出
PE 感知工具,例如文件查看器和转储程序。 但是,GDB 依赖于使用
用于在可执行文件中查找 Dwarf-2 调试信息部分的 PE 长部分名称
图像在运行时,所以如果在命令行上没有指定任何选项, ld
启用长节名称,覆盖默认和技术上正确的行为,
当它在链接可执行映像时发现存在调试信息时
不剥离符号。 [此选项对链接器的所有PE目标端口都有效]

--enable-stdcall-fixup
--disable-stdcall-fixup
如果链接发现它无法解析的符号,它将尝试执行“模糊
链接”通过查找另一个定义的符号,该符号仅在格式上有所不同
符号名称(cdecl vs stdcall)并将通过链接到匹配来解析该符号。
例如,未定义的符号“_foo”可能链接到函数“_foo@12”,或
未定义的符号“_bar@16”可能链接到函数“_bar”。 当。。。的时候
链接器执行此操作,它会打印警告,因为它通常应该无法链接,
但有时导入从第三方 dll 生成的库可能需要此功能
可用。 如果您指定 --enable-stdcall-fixup,此功能已完全启用
并且不打印警告。 如果您指定 --disable-stdcall-fixup,这个特征是
禁用,并且这种不匹配被认为是错误。 [此选项特定于
链接器的 i386 PE 目标端口]

-- 前导下划线
--无前导下划线
对于大多数目标,默认符号前缀是下划线,并在目标的
描述。 通过此选项,可以禁用/启用默认下划线
符号前缀。

--export-all-symbols
如果给定,则用于构建 DLL 的对象中的所有全局符号将被导出
DLL。 请注意,这是默认值,否则不会导出任何内容
符号。 当符号通过 DEF 文件显式导出或隐式导出时
通过函数属性,默认是不导出任何东西,除非这个选项
给出。 请注意符号“DllMain@12”、“DllEntryPoint@0”、
“DllMainCRTStartup@12”和“impure_ptr”不会自动导出。 还,
从其他 DLL 导入的符号不会被重新导出,指定的符号也不会被重新导出
DLL 的内部布局,例如以“_head_”开头或以
“_我的名字”。 此外,没有来自“libgcc”、“libstd++”、“libmingw32”或
“crtX.o”将被导出。 名称以“__rtti_”或“__builtin_”开头的符号
不会被导出,以帮助 C++ DLL。 最后,有一个广泛的列表
未导出的 cygwin-private 符号(显然,这适用于构建
用于 cygwin 目标的 DLL)。 这些 cygwin 排除项是:“_cygwin_dll_entry@12”,
"_cygwin_crt0_common@8", "_cygwin_noncygwin_dll_entry@12", "_fmode", "_impure_ptr",
“cygwin_attach_dll”、“cygwin_premain0”、“cygwin_premain1”、“cygwin_premain2”、
“cygwin_premain3”和“环境”。 [此选项特定于 i386 PE 目标
链接器的端口]

--排除符号 符号,符号,...
指定不应自动导出的符号列表。 符号
名称可以用逗号或冒号分隔。 [此选项特定于 i386 PE
链接器的目标端口]

--排除所有符号
指定不应自动导出符号。 [此选项特定于
链接器的 i386 PE 目标端口]

--文件对齐
指定文件对齐方式。 文件中的部分将始终以文件偏移量开始
这是这个数字的倍数。 这个默认为 512。 [这个选项是特定的
到链接器的 i386 PE 目标端口]

- 堆 储备
- 堆 储备,承诺
指定要保留(和可选地提交)用作的内存字节数
这个程序的堆。 默认为 1MB 保留,4K 已提交。 [这个选项是
特定于链接器的 i386 PE 目标端口]

--图像库
使用方法 作为您的程序或 dll 的基址。 这是最低的内存
加载程序或 dll 时将使用的位置。 为了减少需要
重新定位并提高 dll 的性能,每个都应该有一个唯一的基地址
并且不与任何其他 dll 重叠。 可执行文件的默认值为 0x400000,并且
0x10000000 用于 dll。 [此选项特定于 i386 PE 目标端口
链接器]

--kill-at
如果给定,则 stdcall 后缀 (@nn) 将在符号出现之前从符号中删除
出口。 [此选项特定于链接器的 i386 PE 目标端口]

--大地址感知
如果给定,则设置 COFF 标头的“特征”字段中的相应位
表示此可执行文件支持大于 2 GB 的虚拟地址。
这应该与 /3GB 或 /USERVA= 结合使用 兆字节切换
BOOT.INI 的“[操作系统]”部分。 否则,该位无效。
[此选项特定于链接器的 PE 目标端口]

--disable-large-address-aware
恢复之前的效果 --大地址感知 选项。 这很有用,如果
--大地址感知 总是由编译器驱动程序(例如 Cygwin gcc)和
可执行文件不支持大于 2 GB 的虚拟地址。 [此选项
特定于链接器的 PE 目标端口]

--主要图像版本
设置“图像版本”的主要编号。 默认为 1。 [这个选项是
特定于链接器的 i386 PE 目标端口]

--主要操作系统版本
设置“操作系统版本”的主要编号。 默认为 4。 [此选项是特定的
到链接器的 i386 PE 目标端口]

--主要子系统版本
设置“子系统版本”的主要编号。 默认为 4。 [这个选项是
特定于链接器的 i386 PE 目标端口]

--次要图像版本
设置“图像版本”的次要编号。 默认为 0。 [这个选项是
特定于链接器的 i386 PE 目标端口]

--次要操作系统版本
设置“操作系统版本”的次要编号。 默认为 0。 [此选项是特定的
到链接器的 i386 PE 目标端口]

--次要子系统版本
设置“子系统版本”的次要编号。 默认为 0。 [这个选项是
特定于链接器的 i386 PE 目标端口]

--输出定义 文件
链接器将创建文件 文件 它将包含对应于的 DEF 文件
链接器正在生成的 DLL。 此 DEF 文件(应称为“*.def”)可能
用于创建带有“dlltool”的导入库或可用作对
自动或隐式导出符号。 [此选项特定于 i386 PE
链接器的目标端口]

--out-隐含 文件
链接器将创建文件 文件 它将包含一个对应的导入库
链接器正在生成的 DLL。 此导入库(应称为“*.dll.a”或
“*.a”可用于将客户端链接到生成的 DLL; 这种行为使它
可以跳过单独的“dlltool”导入库创建步骤。 [这个选项是
特定于链接器的 i386 PE 目标端口]

--enable-auto-image-base
--enable-auto-image-base=
自动为 DLL 选择映像库,可选择从 base 开始 ,
除非使用“--image-base”参数指定一个。 通过使用生成的哈希
从 dllname 为每个 DLL 创建唯一的映像库、内存冲突和
避免了可能延迟程序执行的重定位。 【这个选项是特定的
到链接器的 i386 PE 目标端口]

--disable-auto-image-base
不要自动生成唯一的图像库。 如果没有用户指定
图像库(“--image-base”)然后使用平台默认值。 【这个选项是特定的
到链接器的 i386 PE 目标端口]

--dll 搜索前缀 绳子
在没有导入库的情况下动态链接到 dll 时,搜索
” .dll”优先于“lib .dll”。这种行为允许
为各种“子平台”构建的 DLL 之间的简单区分:本机、cygwin、
uwin、pw 等。例如,cygwin DLL 通常使用“--dll-search-prefix=cyg”。
[此选项特定于链接器的 i386 PE 目标端口]

--启用自动导入
对从 DLL 导入的数据进行“_symbol”到“__imp__symbol”的复杂链接,
并在构建导入库时创建必要的 thunking 符号
那些数据出口。 注意:使用“自动导入”扩展名将导致文本
要使图像文件可写的部分。 这不符合 PE-COFF
Microsoft 发布的格式规范。

注意 - 使用“自动导入”扩展也会导致只读数据
通常被放入 .rdata 节 被放入 .data 节
反而。 这是为了解决所描述的常量问题
这里: http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html

使用“自动导入”通常会“正常工作”——但有时您可能会看到这一点
信息:

"变量 ' ' 不能自动导入。请阅读 ld 的文档
“--enable-auto-import”了解详情。”

当某些(子)表达式访问最终由
两个常量的总和(Win32 导入表只允许一个)。 这的实例
可能发生的情况包括访问从 DLL 导入的结构变量的成员字段,
以及在从 DLL 导入的数组变量中使用常量索引。 任何
多字变量(数组、结构、long long 等)可能会触发此错误条件。
但是,无论有问题的导出变量的确切数据类型如何,ld 都会
始终检测到它,发出警告,然后退出。

有几种方法可以解决这个困难,无论数据类型如何
导出变量:

一种方法是使用 --enable-runtime-pseudo-reloc 开关。 这留下了任务
为运行时环境调整客户端代码中的引用,因此此方法有效
仅当运行时环境支持此功能时。

第二种解决方案是强制“常量”之一成为变量——也就是说,
在编译时未知且不可优化。 对于数组,有两种可能:
a) 使 indexee (数组的地址) 成为变量,或 b) 使“常量”索引
一个变量。 因此:

外部类型 extern_array[];
extern_array[1] -->
{ 易失性类型 *t=extern_array; t[1] }

or

外部类型 extern_array[];
extern_array[1] -->
{ 易失性整数 t=1; extern_array[t] }

对于结构(和大多数其他多字数据类型),唯一的选择是使
struct 本身(或 long long 或 ...)变量:

外部结构 s extern_struct;
extern_struct.field -->
{ 易失性结构 s *t=&extern_struct; t-> 字段 }

or

extern long long extern_ll;
extern_ll -->
{ volatile long long * local_ll=&extern_ll; *local_ll }

解决这个困难的第三种方法是放弃“自动导入”
有问题的符号并用“__declspec(dllimport)”标记它。 然而,在实践中,
需要使用编译时 #defines 来指示您是否正在构建 DLL,
构建将链接到 DLL 的客户端代码,或仅构建/链接到静态
图书馆。 在解决“直接”问题的各种方法之间做出选择时
解决具有恒定偏移量的问题,您应该考虑典型的实际用法:

原文:

--foo.h
外部 int arr[];
--foo.c
#include "foo.h"
无效的主要(int argc,char **argv){
printf("%d\n",arr[1]);
}

1解决方案:

--foo.h
外部 int arr[];
--foo.c
#include "foo.h"
无效的主要(int argc,char **argv){
/* 此解决方法适用于 win32 和 cygwin; 不要“优化”*/
易失性 int *parr = arr;
printf("%d\n",parr[1]);
}

2解决方案:

--foo.h
/* 注意:假定自动导出(没有 __declspec(dllexport))*/
#if (defined(_WIN32) || defined(__CYGWIN__)) && \
!(已定义(FOO_BUILD_DLL) || 已定义(FOO_STATIC))
#define FOO_IMPORT __declspec(dllimport)
的#else
#define FOO_IMPORT
#ENDIF
外部 FOO_IMPORT int arr[];
--foo.c
#include "foo.h"
无效的主要(int argc,char **argv){
printf("%d\n",arr[1]);
}

避免此问题的第四种方法是重新编码您的库以使用功能
有问题的变量的接口而不是数据接口(例如 set_foo()
get_foo() 访问器函数)。 [此选项特定于 i386 PE 目标端口
链接器的]

--禁用自动导入
不要尝试将 DATA 的“_symbol”复杂链接到“__imp__symbol”
从 DLL 导入。 [此选项特定于 i386 PE 目标端口
链接器]

--enable-runtime-pseudo-reloc
如果您的代码包含 --enable-auto-import 部分中描述的表达式,即
DATA 从具有非零偏移量的 DLL 导入,此开关将创建一个向量
“运行时伪重定位”,运行时环境可以使用它来调整
在您的客户端代码中引用此类数据。 [此选项特定于 i386 PE
链接器的目标端口]

--disable-runtime-pseudo-reloc
不要为来自 DLL 的非零偏移量 DATA 导入创建伪重定位。 [这个
选项特定于链接器的 i386 PE 目标端口]

--enable-extra-pe-debug
显示与自动导入符号转换相关的其他调试信息。 [这个选项是
特定于链接器的 i386 PE 目标端口]

--section-alignment
设置截面对齐。 内存中的部分总是从以下地址开始
是这个数字的倍数。 默认为 0x1000。 [此选项特定于
链接器的 i386 PE 目标端口]

- 堆 储备
- 堆 储备,承诺
指定要保留(和可选地提交)用作的内存字节数
这个程序的堆栈。 默认为 2MB 保留,4K 已提交。 [这个选项是
特定于链接器的 i386 PE 目标端口]

--子系统
--子系统 :主要
--子系统 :主要.未成年人
指定您的程序将在哪个子系统下执行。 的法律价值
是“本机”、“Windows”、“控制台”、“posix”和“xbox”。 您可以选择设置
子系统版本也是如此。 也接受数字值 . [此选项
特定于链接器的 i386 PE 目标端口]

以下选项在 PE 文件的“DllCharacteristics”字段中设置标志
标头:[这些选项特定于链接器的 PE 目标端口]

--高熵-va
图像与 64 位地址空间布局随机化 (ASLR) 兼容。

--动态基础
可以使用地址空间布局随机化重新定位图像基地址
(ASLR)。 此功能是针对 i386 PE 目标的 MS Windows Vista 引入的。

--forceinteg
强制执行代码完整性检查。

--nxcompat
该图像与数据执行保护兼容。 这个功能是
针对 i2 PE 目标的 MS Windows XP SP386 引入。

--无隔离
虽然图像理解隔离,但不要隔离图像。

--no-seh
该图像不使用 SEH。 不能从此映像调用任何 SE 处理程序。

--无绑定
请勿绑定此图像。

--wdmdriver
该驱动程序使用 MS Windows 驱动程序模型。

--tsaware
该图像是终端服务器感知的。

--插入时间戳
--no-insert-timestamp
在图像中插入一个真实的时间戳。 这是默认行为,因为它匹配
遗留代码,这意味着图像将与其他专有工具一起使用。 这
此默认设置的问题在于它会导致图像略有不同
每次链接相同的来源时都会产生。 选项 --no-insert-timestamp 能够
用于为时间戳插入零值,这确保生成的二进制文件
来自相同来源的比较结果相同。

C6X uClinux 目标使用称为 DSBT 的二进制格式来支持共享库。 每个
系统中的共享库需要有唯一索引; 所有可执行文件都使用索引
0.

--dsbt-大小 尺寸
此选项设置当前可执行文件或共享文件的 DSBT 中的条目数
图书馆到 尺寸. 默认是创建一个包含 64 个条目的表。

--dsbt-索引 指数
此选项将当前可执行文件或共享库的 DSBT 索引设置为 指数.
默认值为 0,适用于生成可执行文件。 如果一个共享
库生成时 DSBT 索引为 0,“R_C6000_DSBT_INDEX”重定位是
复制到输出文件中。

--no-merge-exidx-entries 开关禁止合并相邻的 exidx 条目
帧展开信息。

68HC11 和 68HC12 链接器支持特定选项来控制存储库
切换映射和蹦床代码生成。

--无蹦床
此选项禁用蹦床的生成。 默认情况下,蹦床是
为使用“jsr”指令调用的每个远函数生成(这个
当获取指向 far 函数的指针时发生)。

--银行窗口 姓名
该选项向链接器指示内存区域的名称 记忆
描述存储体窗口的规范。 该区域的定义是
然后由链接器用于计算内存窗口内的分页和地址。

支持以下选项来控制链接时 GOT 生成的处理
68K 目标。

--得到=类型
该选项告诉链接器使用哪个 GOT 生成方案。 类型 应该是一个
of , , 多重 or 目标. 有关更多信息,请参阅信息条目
提供 ld.

支持以下选项来控制 microMIPS 指令生成
链接 MIPS 目标。

--insn32
--no-insn32
这些选项控制在由以下代码生成的代码中使用的 microMIPS 指令的选择
链接器,例如 PLT 或惰性绑定存根中的链接器,或松弛中的链接器。 如果
--insn32 使用,则链接器仅使用 32 位指令编码。 默认情况下
或者如果 --no-insn32 使用,使用所有指令编码,包括 16 位的
在可能的情况。

环境


你可以改变行为 ld 使用环境变量“GNUTARGET”,
“LDEMULATION”和“COLLECT_NO_DEMANGLE”。

如果不使用,“GNUTARGET”确定输入文件对象格式 -b (或其同义词
- 格式)。 它的值应该是输入格式的 BFD 名称之一。 如果没有
环境中的“GNUTARGET”, ld 使用目标的自然格式。 如果“GNUTARGET”
设置为“默认”然后 BFD 尝试通过检查二进制来发现输入格式
输入文件; 这种方法通常会成功,但存在潜在的歧义,因为
无法确保用于指定目标文件格式的幻数是
独特的。 但是,每个系统上 BFD 的配置过程都将
该系统的传统格式首先出现在搜索列表中,因此解决了歧义
赞成公约。

“LDEMULATION”决定默认模拟,如果你不使用 -m 选项。 该
仿真会影响链接器行为的各个方面,尤其是默认链接器
脚本。 您可以使用以下命令列出可用的仿真 --详细 or -V 选项。 如果
-m 未使用选项,并且未定义“LDEMULATION”环境变量,
默认仿真取决于链接器的配置方式。

通常,链接器将默认对符号进行解调。 然而,如果
环境中设置了“COLLECT_NO_DEMANGLE”,那么它会默认为不解压
符号。 “gcc”链接器以类似的方式使用此环境变量
包装程序。 默认值可能会被覆盖 --demangle--no-demangle
选项​​。

使用 onworks.net 服务在线使用 mips64-linux-gnuabi64-ld


Ad


Ad

最新的 Linux 和 Windows 在线程序