英语法语西班牙语

Ad


OnWorks 网站图标

h8300-hms-ld - 云端在线

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

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

程序:

您的姓名


ld - 使用 LD,GNU 链接器

概要


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

商品描述


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

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

本手册页不描述命令语言; 见 ld “信息”中的条目,或
手册 ld:GNU 链接器,有关命令语言和其他方面的完整详细信息
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,以及脚本命令语言。 如果 没有 二进制
输入文件被指定,链接器不产生任何输出,并发出
的话 没有 输入 .

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

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

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

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

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

gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup

这很重要,否则编译器驱动程序可能会默默地丢弃
链接器选项,导致链接错误。

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

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

-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”具有
一样的效果。

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

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

-E
--出口动态
创建动态链接的可执行文件时,将所有符号添加到动态符号中
桌子。 动态符号表是从动态可见的符号集
运行时的对象。

如果不使用该选项,动态符号表通常只包含
链接中提到的某个动态对象引用的那些符号。

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

您还可以使用版本脚本来控制应将哪些符号添加到
如果输出格式支持动态符号表。 见说明
--version-脚本 在@ref{VERSION} 中。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-l档案
--图书馆=档案
添加存档文件 档案 到要链接的文件列表。 此选项可用于任何
次数。 ld 将在其路径列表中搜索“lib”的出现存档.a"
每周 档案 指定的。

在支持共享库的系统上, ld 也可以搜索图书馆
“.a”以外的扩展名。 具体来说,在 ELF 和 SunOS 系统上, ld 将搜索一个
在搜索具有“.so”扩展名的库之前的目录
“.a”的扩展名。 按照惯例,“.so”扩展名表示共享库。

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

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

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

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

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

If 搜索目录 以“=”开头,则“=”将被替换为 系统根目录 字首,以
配置链接器时指定的路径。

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

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

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

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

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

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

* 目标文件和符号映射到内存的地方。

* 常见符号的分配方式。

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

-n
--nmagic
关闭部分的页面对齐,并尽可能将输出标记为“NMAGIC”。

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

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

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

-O 水平
If 水平 是大于零的数值 ld 优化输出。 这有可能
需要更长的时间,因此可能应该只为最终启用
二进制的。

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

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

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

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

此选项与 -i.

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

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

-s
--全部剥离
省略输出文件中的所有符号信息。

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

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

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

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

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

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

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

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

-X
--丢弃本地人
删除所有临时局部符号。 对于大多数目标,这是所有本地符号
名字以 L.

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

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

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

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

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

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

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

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

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

多重定义
允许多个定义。

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

无拷贝重定位
禁用复制重定位的产生。

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

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

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

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

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

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

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

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

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

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

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

--按需
--不需要的
此选项会影响命令中提到的动态库的 ELF DT_NEEDED 标签
之后的行 --按需 选项。 通常,链接器会为
命令行中提到的每个动态库,无论该库是否
实际上是需要的。 --按需 导致 DT_NEEDED 标签仅针对
满足来自未定义的常规对象的某些符号引用的库
在图书馆被链接的时候。 --不需要的 恢复默认值
行为。

--添加需要
--无需添加
此选项会影响来自 ELF DT_NEEDED 标签中的动态库的处理
在命令行中提到的动态库之后 --无需添加 选项。
通常,链接器会从 DT_NEEDED 为每个动态库添加一个 DT_NEEDED 标签
标签。 --无需添加 导致这些库永远不会发出 DT_NEEDED 标签
来自 DT_NEEDED 标签。 --添加需要 恢复默认行为。

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

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

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

-静态
-dn
-非共享
-静态的
不要链接共享库。 这仅在平台上有意义
支持共享库。 此选项的不同变体用于
与各种系统的兼容性。 您可以多次使用此选项
命令行:它影响库搜索 -l 跟随它的选项。 这个
选项还暗示 --unresolved-symbols=报告全部.

-B符号
创建共享库时,将对全局符号的引用绑定到定义
在共享库中(如果有)。 通常,程序链接可能
针对共享库覆盖共享库中的定义。 这个
选项仅在支持共享库的 ELF 平台上有意义。

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

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

表格的格式特意简单,以便它可以很容易地处理
必要时编写脚本。 符号被打印出来,按名称排序。 对于每个符号,
给出了文件名列表。 如果定义了符号,则列出的第一个文件是
定义的位置。 其余文件包含对符号的引用。

--无定义通用
此选项禁止将地址分配给公共符号。 剧本
命令“INHIBIT_COMMON_ALLOCATION”具有相同的效果。

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

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

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

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

--致命警告
将所有警告视为错误。

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

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

--无 gc 部分
--gc-部分
启用未使用的输入节的垃圾收集。 它在执行的目标上被忽略
不支持这个选项。 此选项不兼容 -r. 默认行为
(不执行这个垃圾收集)可以通过指定来恢复
--无 gc 部分 在命令行上。

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

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

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

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

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

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

--allow-shlib-未定义
--no-allow-shlib-未定义
允许(默认)或禁止共享库中未定义的符号。 这个开关
类似于 --no-未定义 除了它决定了当
未定义符号位于共享库中,而不是常规目标文件中。 它确实
不会影响常规目标文件中未定义符号的处理方式。

的原因 --allow-shlib-未定义 是默认是共享库
在链接时指定的可能与加载时可用的不同
时间,因此符号实际上可能在加载时可解析。 另外还有一些
系统(例如 BeOS),其中共享库中未定义的符号是正常的。 (内核
在加载时修补它们以选择最适合当前的功能
建筑学。 这用于例如动态选择适当的 memset
功能)。 显然,HPPA 共享库未定义也是正常的
符号。

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

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

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

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

--无整个存档
关闭效果 --整体存档 用于后续存档文件的选项。

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

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

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

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

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

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

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

在某些平台上, - 放松 选项执行全局优化,成为
当链接器解析程序中的寻址时可能,例如松弛地址
模式并在输出目标文件中合成新指令。

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

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

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

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

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

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

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

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

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

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

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

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

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

2. 指定的任何目录 -r路径 选项。 和...之间的不同 -r路径
-rpath-链接 是由指定的目录 -r路径 选项包含在
可执行并在运行时使用,而 -rpath-链接 选项仅有效
在链接时。 它仅用于本机链接器。

3. 在 ELF 系统上,如果 -r路径 并且未使用“rpath-link”选项,请搜索
环境变量“LD_RUN_PATH”的内容。 它用于本机链接器
只。

4. 在 SunOS 上,如果 -r路径 未使用选项,搜索指定的任何目录
运用 -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
未使用选项并且链接中有未定义的符号。

--排序-常见
这个选项告诉 ld 将常用符号放入
适当的输出部分。 首先是所有的一字节符号,然后是所有的两个
字节,然后是所有四个字节,然后是其他所有内容。 这是为了防止出现间隙
由于对齐约束,符号之间。

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

--排序部分 对准
此选项将“SORT_BY_ALIGNMENT”应用于
链接脚本。

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

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

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

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

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

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

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

-TBSS 组织结构
-T数据 组织结构
-文本 组织结构
与 --section-start 相同,以“.bss”、“.data”或“.text”作为 部分名称.

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

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

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

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

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

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

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

--dll-详细
--详细
显示版本号 ld 并列出支持的链接器仿真。 展示
哪些输入文件可以打开,哪些不能打开。 显示正在使用的链接描述文件
链接器。

--version-脚本=版本脚本文件
为链接器指定版本脚本的名称。 这通常用于
创建共享库以指定有关版本的附加信息
正在创建的库的层次结构。 此选项仅对 ELF 有意义
支持共享库的平台。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

从 gcc 使用此选项时的两个注意事项:首先,gcc 不知道此选项,
所以你必须使用 -Wl,-整体存档. 二、不要忘记使用
-Wl,-无整个存档 在您的档案列表之后,因为 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”之前解决调用。

--启用新的 dtags
--禁用新dtags
这个链接器可以在 ELF 中创建新的动态标签。 但较旧的 ELF 系统可能不会
了解他们。 如果您指定 --启用新的 dtags,将创建动态标签
如所须。 如果您指定 --禁用新dtags,不会创建新的动态标签。
默认情况下,不会创建新的动态标记。 请注意,这些选项仅
可用于 ELF 系统。

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

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

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

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

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

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

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

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

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

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

--导出所有符号
如果给定,则用于构建 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
链接器的目标端口]

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

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

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

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

--大地址感知
如果给定,则 COFF 标头的“特征”字段中的相应位是
设置为指示此可执行文件支持大于 2 的虚拟地址
千兆字节。 这应该与 /3GB 或 /USERVA= 结合使用折扣值 兆字节
在 BOOT.INI 的“[操作系统]”部分切换。 否则,这一点
没有效果。 [此选项特定于链接器的 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 目标端口]

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

--禁用自动图像库
不要自动生成唯一的图像库。 如果没有用户指定
图像库(“--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 发布的格式规范。

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

"变量 ' ' 不能自动导入。请阅读 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 (已定义_WIN32)(获取已定义(__CYGWIN__)) && \
!(defined(FOO_BUILD_DLL) 获取 已定义(FOO_STATIC))
#define FOO_IMPORT __declspec(dllimport)
的#else
#定义FOO_IMPORT
#ENDIF
外部 FOO_IMPORT int arr[];
--foo.c
#include "foo.h"
无效的主要(int argc,char **argv){
printf("%d\n",arr[1]);
}

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

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

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

--禁用运行时伪重新定位
不要为来自 DLL 的非零偏移量 DATA 导入创建伪重定位。 这是
默认值。 [此选项特定于链接器的 i386 PE 目标端口]

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

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

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

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

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

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

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

环境


你可以改变行为 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--无分割
选项​​。

使用 onworks.net 服务在线使用 h8300-hms-ld


免费服务器和工作站

下载 Windows 和 Linux 应用程序

  • 1
    DivFix + +
    DivFix + +
    DivFix++ 是你的 AVI 视频修复和
    预览软件。 它专为维修而设计
    和预览正在下载的文件
    来自 ed2k(emule), torrent, gnutella, ftp...
    下载 DivFix++
  • 2
    JBoss 社区
    JBoss 社区
    社区驱动的项目
    最前沿的最新创新
    应用。 我们的旗舰项目 JBoss AS 是
    领先的开源,
    符合标准...
    下载 JBoss 社区
  • 3
    Django 文件管理器
    Django 文件管理器
    django Filer 是一个文件管理
    django 的应用程序
    轻而易举地处理文件和图像。
    django-filer 是一个文件管理器
    申请djang...
    下载 Django 文件管理器
  • 4
    猫猫
    猫猫
    极端集群管理工具包。
    xCAT是一个可扩展的集群管理
    和提供的配置工具
    硬件控制、发现和操作系统
    满盘/迪...
    下载xCAT
  • 5
    PSI
    PSI
    Psi 是跨平台的强大 XMPP
    为有经验的用户设计的客户端。
    有可用于 MS 的构建
    Windows、GNU/Linux 和 macOS.. 受众:
    终端用户...
    下载PSI
  • 6
    Blobby 凌空抽射 2
    Blobby 凌空抽射 2
    著名的官方延续
    Blobby Volley 1.x 街机游戏..
    受众:最终用户/桌面。 用户
    接口:OpenGL、SDL。 编程
    语言:C++、Lua。 C...
    下载泡泡排球 2
  • 更多 ”

Linux 命令

Ad