英语法语西班牙语

运行服务器 | Ubuntu > | Fedora > |


OnWorks 网站图标

i686-linux-gnu-ld.bfd - 云端在线

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

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

程序:

名称


ld - GNU 链接器

概要


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

商品描述


ld 结合了许多目标文件和存档文件,重新定位它们的数据
并将符号引用联系起来。 通常是编译的最后一步
程序要运行 ld.

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

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

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

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

GNU 链接器 ld 旨在涵盖广泛的情况,并
尽可能与其他链接器兼容。 结果,你有
许多选择来控制其行为。

配置


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

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

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

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

非选项参数是目标文件或存档
联系在一起。 它们可能跟在、先于或混合在
命令行选项,除了目标文件参数可能不是
置于选项与其参数之间。

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

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

对于名称为单个字母的选项,选项参数必须
要么跟随选项字母而不插入空格,要么
在选项之后立即作为单独的参数给出
需要他们。

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

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

注意---如果链接器是通过编译器驱动程序间接调用的
(例如 GCC) 那么所有的链接器命令行选项都应该加上前缀
by -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 以这种方式配置,您可以使用 -b 选项
指定遵循此的输入目标文件的二进制格式
命令行选项。 即使当 ld 配置为支持
替代对象格式,您通常不需要指定它,
as ld 应该配置为期望作为默认输入格式
每台机器上最常用的格式。 输入格式 是一个文本字符串,
BFD 库支持的特定格式的名称。
(您可以列出可用的二进制格式 转储 -i.)

如果您将文件与
不寻常的二进制格式。 你也可以使用 -b 切换格式
明确地(当链接不同格式的目标文件时),通过
如: -b 输入格式 在每组目标文件之前
特定格式。

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

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

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

-d
-直流
-dp 这三个选项是等效的; 支持多种形式
与其他链接器兼容。 他们为公共空间分配空间
即使指定了可重定位的输出文件(带有 -r).
脚本命令“FORCE_COMMON_ALLOCATION”具有相同的效果。

--depaudit 审计署
-P 审计署
添加 审计署 到动态部分的“DT_DEPAUDIT”条目。
审计署 不检查是否存在,也不会使用
库中指定的 DT_SONAME。 如果多次指定
“DT_DEPAUDIT”将包含一个冒号分隔的审计列表
要使用的接口。 此选项仅在 ELF 平台上有意义
支持rtld-audit接口。 -P 选项用于
Solaris 兼容性。

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

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

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

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

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

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

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

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

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

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

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

如果您稍后将程序链接到此过滤器对象,那么,当
你运行程序,动态链接器会看到 DT_AUXILIARY
场地。 如果动态链接器解析过滤器中的任何符号
对象,它会首先检查对象中是否有定义
共享对象 姓名. 如果有,它将被使用而不是
过滤器对象中的定义。 共享对象 姓名 需要
不存在。 因此共享对象 姓名 可用于提供
某些功能的替代实现,也许是为了
调试或机器特定性能。

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

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

如果您稍后将程序链接到此过滤器对象,那么,当
你运行程序,动态链接器会看到 DT_FILTER
场地。 动态链接器将根据
过滤器对象的符号表像往常一样,但实际上
链接到共享对象中的定义 姓名。 就这样
过滤器对象可用于选择符号的子集
由对象提供 姓名.

一些较旧的链接器使用 -F 整个编译过程中的选项
用于指定输入和目标文件格式的工具链
输出目标文件。 GNU 链接器为此使用其他机制
目的: -b, - 格式, --oformat 选项,“目标”命令
在链接器脚本和“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's
默认链接器脚本(而不是添加到它),所以 命令文件
必须指定描述输出文件所需的一切。
If 脚本文件 当前目录中不存在,“ld”看起来
对于它在任何前面指定的目录中 -L 选项​​。
-T 选项累积。

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

此选项类似于 - 脚本 选项除外
脚本的处理被延迟到剩下的
命令行已处理。 这允许选项放置在
练习 --默认脚本 命令行上的选项来影响
链接描述文件的行为,当
链接器命令行不能由用户直接控制。 (例如
因为命令行是由另一个工具构建的,例如
as GCC).

-u 符号
--未定义=符号
符号 以未定义的形式输入到输出文件中
象征。 例如,这样做可能会触发附加链接
标准库中的模块。 -u 可以用不同的方式重复
用于输入其他未定义符号的选项参数。 这个
选项等效于“EXTERN”链接描述文件命令。

如果此选项用于强制附加模块
拉入链接,如果符号错误
保持未定义,则选项 --需要定义 应该使用
代替。

--需要定义=符号
要求 符号 在输出文件中定义。 这个选项是
与选项相同 - 不明确的 除了如果 符号 没有定义
在输出文件中,链接器将发出错误并退出。
可以在链接描述文件中使用相同的效果
“外部”、“断言”和“定义”在一起。 可以使用这个选项
多次需要额外的符号。

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

--孤儿处理=MODE
控制如何处理孤立部分。 孤儿部分是一个
链接描述文件中没有特别提及。

MODE 可以具有以下任何值:

“地方”
孤立部分被放置到合适的输出部分
遵循中描述的策略 孤儿 。 该
选项 - 独特的 也会影响部分的放置方式。

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

“警告”
链接器将把孤立部分放在“地方”和
也发出警告。

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

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

--唯一[=部分]
为每个匹配的输入部分创建一个单独的输出部分
部分, 或者如果可选的通配符 部分 缺少论据,
对于每个孤立输入部分。 孤儿部分不是
链接描述文件中特别提到。 您可以使用此选项
在命令行上多次; 它阻止了正常的合并
具有相同名称的输入节,覆盖输出节
链接描述文件中的赋值。

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

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

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

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

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

-Y
加入 到默认库搜索路径。 这个选项存在
用于 Solaris 兼容性。

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

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

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

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

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

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

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

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

负载滤波器
标记其过滤器立即处理的对象
运行。

多重定义
允许多个定义。

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

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

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

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

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

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

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

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

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

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

诺雷罗
不要在
目的。

联系 生成可执行或共享库时,将其标记为
告诉动态链接器在程序运行时解析所有符号
已启动,或当共享库链接到使用
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”填充
通过其 GOT 槽调用本地定义的函数 foo。
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
创建共享库时,将引用绑定到全局符号
到共享库中的定义(如果有)。 通常,它
链接到共享库的程序可以
覆盖共享库中的定义。 这个选项可以
也可以与 --出口动态 选项,当创建一个
位置独立的可执行文件,将引用绑定到全局
符号到可执行文件中的定义。 这个选项是
仅在支持共享库和
位置独立的可执行文件。

-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
输出交叉引用表。 如果链接器映射文件正在
生成后,交叉引用表将打印到地图文件中。
否则,它会打印在标准输出上。

表格的格式故意简单,所以它可能是
如有必要,可通过脚本轻松处理。 符号被打印
出,按名称排序。 对于每个符号,文件名列表是
给。 如果定义了符号,则列出的第一个文件是
定义的位置。 如果符号被定义为一个普通的
value 然后出现这种情况的任何文件接下来会出现。 最后任何
列出了引用该符号的文件。

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

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

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

--demangle[=样式]
--no-demangle
这些选项控制是否对错误的符号名称进行解构
消息和其他输出。 当链接器被告知要进行 demangle 时,它
试图以一种可读的方式呈现符号名称:它去掉
前导下划线,如果它们被目标文件格式使用,和
将 C++ 损坏的符号名称转换为用户可读的名称。
不同的编译器有不同的修改风格。 可选的
可以使用 demagling 风格参数来选择合适的
为您的编译器调整样式。 链接器将通过
默认除非环境变量 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
列出垃圾收集删除的所有部分。 清单是
打印在标准错误上。 此选项仅在垃圾时有效
已通过以下方式启用收集 --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 控制
报告在共享中发现的未解析引用的行为
正在链接的库。

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

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

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

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

· 链接时指定的共享库可能与
在加载时可用的那个,所以符号可能
实际上可以在加载时解析。

· 有一些操作系统,例如 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 以这种方式配置,您可以使用 --oformat 选项
指定输出目标文件的二进制格式。 即使当
ld 配置为支持替代对象格式,您不
通常需要指定这一点,如 ld 应该配置为产生
作为默认输出格式,每台机器上最常用的格式。
输出格式 是一个文本字符串,特定格式的名称
BFD 库支持。 (您可以列出可用的二进制文件
格式与 转储 -i.) 脚本命令“OUTPUT_FORMAT”可以
还指定输出格式,但此选项会覆盖它。

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

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

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

- 放松
--不放松
具有机器相关效果的选项。 该选项仅
支持几个目标。

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

在某些平台上,这些链接时间全局优化可能会使
对生成的可执行文件进行符号调试是不可能的。 这是
众所周知,Matsushita 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”被搜索共享
它需要的库。 如果出现以下情况,将忽略“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 不能代表超过 65535
在单个部分中重新定位。 请注意,这将无法工作
使用不支持任意部分的目标文件格式。
链接器不会拆分单独的输入部分
重新分配,因此如果单个输入部分包含多个
重定位一个输出部分将包含那么多
搬迁。 默认值为 32768。

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

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

--传统格式
对于某些目标,输出 ld 在某些方面不同于
一些现有链接器的输出。 此开关请求 ld 使用
取而代之的是传统格式。

例如,在 SunOS 上, ld 组合符号中的重复条目
字符串表。 这可以减少具有完整输出文件的大小
调试信息超过 30%。 不幸的是,SunOS
“dbx”程序无法读取结果程序(“gdb”没有
麻烦)。 这 --传统格式 开关告诉 ld 不结合
重复条目。

--section-start=部分名称=组织结构
在给定的绝对地址处定位输出文件中的一个部分
by 组织结构. 您可以根据需要多次使用此选项
在命令行中定位多个部分。 组织结构 必须是单身
十六进制整数; 为了与其他链接器兼容,您可以
省略前导 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平台支持,可以使用版本脚本过滤
自动导出模式下的符号可见性:标记的任何符号 本地 in
不会导出版本脚本。

--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 等格式,
链接器无法检测到全局构造函数的使用。

--warn-multiple-gp
输出中是否需要多个全局指针值时发出警告
文件。 这仅对某些处理器有意义,例如
Α。 具体来说,一些处理器将大值常量放在
一个特殊的部分。 一个特殊的寄存器(全局指针)指向
到此部分的中间,以便可以加载常量
有效地通过基址寄存器相对寻址模式。 自从
基址寄存器相对模式中的偏移量是固定且相对的
小(例如,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 会将它自己的档案列表添加到您的
链接,您可能不希望此标志也影响这些标志。

--包裹=符号
使用包装函数 符号. 任何未定义的引用
符号 将被解析为“__wrap_象征”. 任何未定义
参考“__real_象征” 将被解决 符号.

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

这是一个简单的例子:

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

如果您使用此文件链接其他代码 - 裹 分配,那么所有
对“malloc”的调用将改为调用函数“__wrap_malloc”。
在“__wrap_malloc”中调用“__real_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”展开信息
代码部分,如 PLT。 如果链接器默认打开此选项
支持生成的展开信息。

--enable-new-dtags
--disable-new-dtags
这个链接器可以在 ELF 中创建新的动态标签。 但年龄越大
ELF 系统可能无法理解它们。 如果您指定
--enable-new-dtags,将根据需要创建新的动态标签
旧的动态标签将被省略。 如果您指定
--disable-new-dtags,不会创建新的动态标签。 经过
默认情况下,不会创建新的动态标记。 请注意,那些
选项仅适用于 ELF 系统。

--哈希大小=
将链接器哈希表的默认大小设置为质数
相近 . 增加这个值可以减少长度
链接器执行其任务所需的时间,代价是
增加链接器的内存要求。 同样减少
这个值可以减少内存需求,但代价是
速度。

--哈希样式=样式
设置链接器哈希表的类型。 样式 可以是“sysv”
对于经典的 ELF ".hash" 部分,对于新样式 GNU 的 "gnu"
“.gnu.hash”部分或经典ELF“.hash”和“both”部分
新样式 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十六进制字符串" 使用
指定为偶数个十六进制数的选定位串
数字(忽略数字对之间的“-”和“:”字符)。
If 样式 省略,使用“sha1”。

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

传递“无” 样式 禁用任何“--build-id”的设置
命令行上较早的选项。

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

除了所有目标通用的选项外,i386 PE 链接器
支持特定于 i386 的其他命令行选项
体育目标。 取值的选项可能与它们的值分开
由空格或等号组成。

--add-stdcall-alias
如果给定,带有 stdcall 后缀 (@nn) 将导出为-
is 并且还去掉了后缀。 [此选项特定于
链接器的 i386 PE 目标端口]

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

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

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

--enable-stdcall-fixup
--disable-stdcall-fixup
如果链接发现它无法解析的符号,它将尝试
通过寻找另一个定义的符号来做“模糊链接”
仅在符号名称的格式上有所不同(cdecl 与 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_”开头或结尾的布局
与“_iname”。 此外,没有来自“libgcc”、“libstd++”、
“libmingw32”或“crtX.o”将被导出。 名字的符号
以“__rtti_”或“__builtin_”开头的将不会被导出,以帮助
使用 C++ DLL。 最后,有一个广泛的 cygwin 列表 -
未导出的私有符号(显然,这适用于
为 cygwin 目标构建 DLL 时)。 这些 cygwin-excludes 是:
"_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 目标端口
链接器]

- 堆 储备
- 堆 储备,承诺
指定要保留的内存字节数(以及可选的
commit) 用作此程序的堆。 默认为 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-隐含 文件
链接器将创建文件 文件 这将包含一个导入
lib 对应于链接器生成的 DLL。 这个进口
lib(应称为“*.dll.a”或“*.a”可用于链接
客户端针对生成的 DLL; 这种行为使它成为可能
跳过单独的“dlltool”导入库创建步骤。 [这
选项特定于链接器的 i386 PE 目标端口]

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

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

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

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

注意 - 使用“自动导入”扩展也会导致只读
通常会放入 .rdata 部分的数据
改为放入 .data 部分。 这是为了工作
围绕这里描述的常量问题:
http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html

使用“自动导入”通常会“正常工作”——但有时你
可能会看到此消息:

"变量 ' ' 不能自动导入。请阅读
有关详细信息,请参阅 ld 的“--enable-auto-import”文档。

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

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

一种方法是使用 --enable-runtime-pseudo-reloc 开关。 这离开
为运行时调整客户端代码中的引用的任务
环境,所以这个方法只在运行时环境
支持这个功能。

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

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

or

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

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

外部结构 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 目标端口
链接器的]

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

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

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

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

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

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

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

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

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

--动态基础
可以使用地址空间布局重新定位图像基地址
随机化(ASLR)。 此功能是在 MS Windows 中引入的
适用于 i386 PE 目标的 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”指令(当指向远函数的指针时会发生这种情况
被采取)。

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

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

--得到=类型
该选项告诉链接器使用哪个 GOT 生成方案。
类型 应该是其中之一 , , 多重 or 目标。 对于
更多信息请参考信息条目 ld.

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

--insn32
--no-insn32
这些选项控制用于的 microMIPS 指令的选择
链接器生成的代码,如PLT或lazy
绑定存根,或放松。 如果 --insn32 被使用,那么
链接器仅使用 32 位指令编码。 默认情况下或如果
--no-insn32 使用时,使用所有指令编码,包括
在可能的情况下使用 16 位。

环境


你可以改变行为 ld 与环境变量
“GNUTARGET”、“LDEMULATION”和“COLLECT_NO_DEMANGLE”。

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

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

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

使用 onworks.net 服务在线使用 i686-linux-gnu-ld.bfd


Ad


Ad