ld - GNU链接器(Linux手册页)中

-N

--omagic

将文本和数据部分设置为可读写。此外,不要对数据段进行页面对齐,并禁用链接到共享库。如果输出格式支持Unix样式幻数,请将输出标记为“OMAGIC”。注意:尽管PE-COFF目标允许使用可写文本部分,但它不符合Microsoft发布的格式规范。

--no-OMAGIC

该选项否定了-N选项的大部分影响。它将文本部分设置为只读,并强制数据段与页面对齐。注 - 此选项不启用链接到共享库。为此使用-Bdynamic。

-o 输出

--output = 输出

使用output作为ld生成的程序的名称; 如果未指定此选项,则默认使用名称a.out。脚本命令“OUTPUT”也可以指定输出文件名。

-O level

如果level是大于零的数值,则ld优化输出。这可能需要更长的时间,因此可能只应为最终的二进制文件启用。此选项仅影响ELF共享库生成。链接器的未来版本可能会更多地使用此选项。目前,此选项的不同非零值的链接器行为也没有区别。这可能会随着未来的版本而改变。

-q

--emit-relocs

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

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

--force-dynamic

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

-r

--relocatable

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

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

此选项与-i的作用相同。

-R 文件名

--just-symbols = filename

从文件名中读取符号名称及其地址,但不要将其重新定位或将其包含在输出中。这允许您的输出文件以符号方式引用其他程序中定义的内存的绝对位置。您可以多次使用此选项。

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

-s

--strip-ALL

省略输出文件中的所有符号信息。

-S

--strip-debug

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

-t

--trace

使用scriptfile作为链接描述文件。此脚本替换ld的默认链接描述文件(而不是添加到其中),因此命令文件必须指定描述输出文件所需的所有内容。如果当前目录中不存在scriptfile,则“ld”会在任何前面的-L选项指定的目录中查找它。多个-T选项累积。

-T scriptfile

--script=scriptfile

使用scriptfile作为默认链接描述文件。

此选项类似于--script选项,除了脚本的处理延迟到处理完其余命令行之后。这允许在命令行上的--default-script选项之后放置的选项影响链接描述文件的行为,这在用户无法直接控制链接器命令行时非常重要。(例如,因为命令行是由另一个工具构建的,例如 gcc)。

-u 符号

--undefined = symbol

强制符号作为未定义的符号输入到输出文件中。例如,这样做可以触发标准库中其他模块的链接。可以使用不同的选项参数重复-u以输入其他未定义的符号。此选项等同于 “EXTERN”链接描述文件命令。

-ur

对于除C ++程序之外的任何其他内容,此选项等效于-r:它生成可重定位输出---即输出文件,该输出文件又可作为ld的输入。链接C ++程序时,-Ur 确实解析了对构造函数的引用,与-r不同 。对于自己与-Ur链接的文件使用-Ur 无效 ; 一旦构建了构造函数表,就无法添加它。使用-Ur仅用于最后一个部分链接,-r用于其他部分链接。

--unique[= SECTION ]

为每个与SECTION匹配的输入节创建单独的输出节,或者如果 缺少可选的通配符SECTION参数,则为每个孤立输入节创建单独的输出节。孤立部分是链接描述文件中未特别提及的部分。您可以在命令行上多次使用此选项; 它会阻止正常合并具有相同名称的输入节,从而覆盖链接描述文件中的输出节分配。

-v

--version

-V

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

-X

--discard-all

删除所有本地符号。

-X

--discard-locals

删除所有临时本地符号。(这些符号以系统特定的本地标签前缀开头,对于ELF系统 通常为.L,对于传统的a.out系统通常为L.)

-y symbol

--trace-symbol = symbol

打印出现符号的每个链接文件的名称。该选项可以被赋予任意次数。在许多系统上,必须预先加下下划线。

如果链接中有未定义的符号但不知道引用的来源,则此选项很有用。

-Y path

添加路径到默认的库搜索路径。此选项用于Solaris兼容性。

-z 关键字

认可的关键字是:

combreloc

组合多个reloc部分并对它们进行排序以使动态符号查找缓存成为可能。

DEFS

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

execstack

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

initfirst

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

干预

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

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

loadfltr

标记在运行时立即处理其过滤器的对象。

muldefs

允许多个定义。

nocombreloc

禁用多个reloc节组合。

nocopyreloc

禁用副本重定位的生成。

NODEFAULTLIB

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

nodelete

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

nodlopen

标记“dlopen”不可用的对象。

nodump

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

noexecstack

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

norelro

不要在对象中创建ELF “PT_GNU_RELRO”段标题。

现在

生成可执行文件或共享库时,将其标记为告诉动态链接器在程序启动时解析所有符号,或者在使用dlopen链接共享库时,而不是将函数调用解析延迟到函数第一个时的点调用。

起源

标记对象可能包含$ ORIGIN。

relro

在对象中创建ELF “PT_GNU_RELRO”段标题。

max-page-size = value

将仿真最大页面大小设置为值。

common-page-size = value

将仿真公共页面大小设置为值。

对于Solaris兼容性,将忽略其他关键字。

- ( 档案 - )

--start-group archives --end-group

该档案应该是一个存档文件的列表。它们可以是显式文件名,也可以是-l选项。

将重复搜索指定的归档,直到未创建新的未定义引用。通常,只按命令行中指定的顺序搜索存档一次。如果需要该存档中的符号来解析稍后在命令行中显示的存档中的对象引用的未定义符号,则链接器将无法解析该引用。通过对存档进行分组,可以反复搜索所有存档,直到解决所有可能的引用。

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

--accept-unknown-input-arch

--no-accept-unknown-input-arch

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

--as-needed

--no-as-needed

此选项会影响--as-needed选项后命令行中提到的动态库的ELF DT_NEEDED标记。通常,链接器将为命令行中提到的每个动态库添加DT_NEEDED标记,无论是否实际需要库。--as-needed导致只为满足常规对象文件的未定义符号引用的库发出DT_NEEDED标记,或者,如果在此点链接的其他库的DT_NEEDED列表中找不到该库,则为undefined来自另一个动态库的符号引用。--no-as-need恢复默认行为。

--add-needed

--no-add-needed

这两个选项已被弃用,因为它们的名称与--as-needed和--no-as-needed选项相似。它们已被--copy-dt-needed-entries和--no-copy-dt-needed-entries替换。

-assert keyword

对于SunOS兼容性,将忽略此选项。