《ld中文使用手册.docx》由会员分享,可在线阅读,更多相关《ld中文使用手册.docx(69页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ld 中文使用手册完全版-转使用 ld*本文档介绍 GNU 连接器 ld 的 2.14 版本.本文档在 GNU 自由文档许可证下发行.在“GNU 自由文档许可证“一章中有关于本许可证的一份拷贝.概述*”ld”把确定量的目标文件跟档案文件连接起来,并重定位它们的数据,连接符号引用.一般,在编译一个程序时,最终一步就是运行”ld”.”ld”能承受连接命令语言文件,这是一种用 AT&T 的连接编辑命令语言的超集写成的文件,用来在连接的整个过程中供给显式的,全局的把握.本版本的”ld”使用通用 BFD 库来操作目标文件.这就允许”ld”读取,合并,写入目标文件时,可以使用各种不同的格式,比方,COFF
2、 或”a.out”。不同的格式可以被连接到一起产生一个有效的目标文件.除了它的灵敏性,GNU 连接器比其它连接器更有用的地方在于它供给了诊断信息. 很多连接器在遇到一个错误的时候马上放弃执行;但”ld”却能够连续执行,以让 你觉察其他的错误引用*GNU 连接器”ld”能够处理大量的不同状况,并且跟其他的连接器保持尽可能的兼容.这样,你就拥有更多的选择来把握它的行为.命令行选项=连接器供给大量的命令行选项,但是,在实际使用中,只有少数被常常使用.比方, ”ld”的一个常常的使用场合是在一个标准的Unix 系统上连接标准的Unix 目标文件.在这样的一个系统上,连接文件”hello.o”如下:ld
3、 -o OUTPUT /lib/crt0.o hello.o -lc这告知”ld”产生一个叫 OUTPUT 的文件,作为连接文件”/lib/crt0.o”和”hello.o ”和库”libc.a”的结果.”libc.a”来自标准的搜寻路径.10 / 60有些命令行选项可以在命令行的任何位置消灭.但是,那些带有文件名的选项,比方”-l”或者”-T”,会让文件在选项消灭的位置上被读取. 对于非文件选项,以带不同的参数重复它,不会有进一步的效果,或者掩盖掉前面的一样项.那些屡次消灭时具有特别含义的选项会在下文的描述中指出.无参数选项是那些被连接的目标文件和档案文件.它们可能紧随命令行选项,或在它们前
4、面,或者跟它们夹杂在一起,但是一个目标文件参数是不会消灭在一个选项跟它的参数之间的.通常,连接器至少引用一个目标文件,但是你可指定其它形式的二进制输入文件, 这可以通过”-l”,”-R”或者脚本命令语言来实现.假设没有任何二进制文件被指定,连接器不会产生任何输出,并给出信息:“缺少输入文件.“假设连接器不能识别目标文件的格式,它会假设这些只是连接脚本.以这种方式指定的脚本增加了连接用的主连接脚本的容. 这个特性可以允许连接器连接一些文件,它们看上去既像目标文件,又像档案文件,但实际上只是定义了一些符号值,或者使用”INPUT”或”GR OUP”来载入其它的目标文件.需要留意的是,用这种方式指定
5、一个脚本只是增加了主连接脚本的容;要完全替换掉主连接脚本,需要使用”-T”.对于名称是单个字符的选项,选项参数必需紧跟在选项字母后面,中间不留空,或者也可留有一个空格.对于名称是多个字符的选项,选项前可以有一个或两个破折号;比方,”-trace-sy mbol”和-trace-symbol”是等价的. 留意,对于这条规章有一个例外.那些以小写字母”o”开头的多字符选项前面只能是两个破折号,这是为了避开跟选项”-o” 混淆. 比方”-omagic”把输出文件的名字定为”magic”,而”-omagic”在输出文件中设置 NMAGIC 标志.多字符选项的参数必需跟选项名间以一个等于号分开,或者以一
6、个空格分开.比方:-trace-symbol foo”和-trace-symbol=foo”是等价的. 多字符选项的名字唯一缩写符也是可以被承受的.留意,假设连接器通过被编译器驱动来间接引用, 那全部的连接器命令行选项前必需加上前缀”-Wl”,就像下面这样:gcc -Wl,-startgroup foo.o bar.o -Wl,-endgroup这很重要,由于否则的话,编译器驱动程序会默认丢掉这些连接选项,产生一个错误的连接.下面是关于被 GNU 连接器承受的常用命令行开关的一个列表:-aKEYWORD”这个选项在HP/UX 兼容系统上被支持. 参数KEYWORD 必需是下面字符串中的一个:a
7、rchive”, shared”, or default”.-aarchive”在功能上跟-Bstatic” 一样,而另外两个关键字功能上跟-Bdynamic”一样.这个选项可被屡次使用.-AARCHITECTURE”-architecture=ARCHITECTURE”在最近发行版本的”ld”中,这个选项只在 Intel 960 系列架构上有用. 在那种”l d”配置中,参数 ARCHITECTURE 确定 960 系列的某一特定架构,启用某些安全措施, 并修改档案库的搜寻路径.将来的”ld”发行版可能为其它架构系列支持相像的功能.-b INPUT-formAT”-format=INPUT-
8、formAT”ld”可以被配置为支持多于一种的目标文件.假设你的”ld”以这种方式被配置, 你可以使用”-b”选项为输入目标文件指定二进制格式. 就算”ld”被配置为支持可选目标格式,你不必常常指定这一项,由于”ld”被配置为在每一台机子上把最常用的格式作为默认输入格式. INPUT-formAT 是一个字符串,你可能在连接一个不常用的二进制格式文件时需要这个参数.你也可使用”-b”来显式切换格式,方法是在每一组特定格式的目标前使用”-b INPUT-formAT”.缺省的格式是从环境变量”GNUTARGET”中得到的.你也可以从一个脚本中定义输入格式,使用的命令是”TARGET”.-c MR
9、I-COMMANDFILE”-mri-script=MRI-COMMANDFILE”为了跟 MRI 生产的连接器兼容,”ld”承受另一种用受限命令语言写成的脚本文件, 通过选项”-c”引入 MRI 脚本文件;使用”-T”选项是运行用一般”ld”脚本语言写的连接脚本.假设 MRI-CMDFILE 不存在,”ld”在”-L”指定的名目中查找.-d”-dc”-dp”这三个选项是等价的; 多字符形式是为了跟其他连接器兼容才被支持的.它们给一般符号安排空间,即使一个重定位输出文件已经被指定. 脚本命令FORCE_COMMON_ALLOCATION”具有同样的效果.-e ENTRY”-entry=ENTR
10、Y”使用符号 ENTRY 作为你的程序的开头执行点,而不是使用缺省的进入点.假设没有叫做ENTRY 的符号,连接器会企图把ENTRY 作为一个数字进展分析,并使用它作为入口地址-E”-export-dynamic”当创立一个动态连接的可执行程序时, 把全部的符号加到动态符号表中.动态符号表是一个符号集,这些符号对于运行时的动态对象是可见的.假设你不使用这个选项,动态符号表中就会只含有那些连接进来的动态对象中用到的符号假设你使用”dlopen”来载入动态对象,它需要引用程序中的符号,那你可能需要在连接程序时用到这个选项.你也可以使用版本脚原来把握哪些符号应当被加到动态符号表中.-EB”连接 bi
11、g-endian 对象. 这会影响缺省输出格式.-EL”连接 little-endian 对象. 这会影响缺省输出格式.-g”无视. 为了跟其它工具兼容而供给.-i”执行一个增量连接-init NAME”当创立一个 ELF 可执行文件或共享对象时,当可执行文件或共享对象被加载时, 调用NAME, 这是通过把DT_INIT 设置成函数的地址实现的. 缺省状况下,连接器使用”_init”作为调用的函数.-lARCHIVE”-library=ARCHIVE”增加一个档案文件 ARCHIVE 到连接的文件列表中.这个选项可以被屡次使用. ”l d”会为每一个指定的 ARCHIVE 搜寻它的路径列表,查
12、找libARCHIVE.a”对于支持共享库的系统, ”ld”可能还会搜寻扩展名不是”.a”库.特别的,在 ELF 和 SunOS 系统上,”ld”会在搜寻带有”.a”扩展名的库前搜寻带”.so”扩展名的库.-M”-print-map”打印一个连接位图到标准输出.一个连接位图供给的关于连接的信息有如下一些:* 目标文件和符号被映射到存的哪些地方.* 一般符号如何被安排空间.* 全部被连接进来的档案文件,还有导致档案文件被包含进来的那个符号.-n”-nmagic”关闭全部节的页对齐,假设可能,把输出格式标识为”NMAGIC”.-N”-omagic”把text 和data 节设置为可读写.同时,取消
13、数据节的页对齐,同时,取消对共享库的连接.假设输出格式支持Unix 风格的magic number, 把输出标志为”OMAGIC”.-no-omagic”这个选项执行的操作大局部正好跟”-N”相反.它设置text 节只读,强制data 节页对齐. 但是,这个选项并不开启连接共享库的功能. 使用”-Bdynamic”开启这个功能.-o OUTPUT”-output=OUTPUT”使用 OUTPUT 作为”ld”产生的程序的名字;假设这个选项没有指定,缺省的输出文件名是”a.out”.脚本命令”OUTPUT”也可以被用来指定输出文件的文件名.-O LEVEL”假设LEVEL 是一个比0 大的数值,
14、 ”ld”优化输出.这可能会明显多占用时间,所以只有在生成最终的文件时使用.-q”-emit-relocs”把重定位节和容留在完全连接后的可执行文件中. 连接分析和优化工具可能需要这些信息用来进展正确的修改与执行. 这在大的可执行文件中有用.这个选工程前只支持 ELF 平台.-r”-relocateable”产生可重定位的输出,比方,产生一个输出文件它可再次作为”ld”的输入。这常常被叫做“局部连接“。作为一个副作用,在支持标准 Unix 魔数的环境中,这个选项会把输出文件的魔数设置为”OMAGIC”。假设这个选项没有被指定,一个确定文件就会被产生。当连接C+程序时,这个选项就不会解析构造函数
15、的引用;要解析, 必需使用”-Ur”假设输入文件跟输出文件的格式不同,只有在输入文件不含有重定位信息的时候局部连接才被支持.输出格式不同的时候会有更多的限制.比方,有些”a.out”的格式在输入文件是其他格式的时候完全不支持局部连接。这个选项跟”-i”等效.-R FILENAME”-just-symbols=FILENAME”从 FILENAME 中读取符号名跟它们的值,但不重位这个文件,或者根本不把它包含在输出文件中.这就允许你的输出文件引用其它程序中定义确实定存地址.你可以屡次使用这个选项.为了跟其他 ELF 连接器兼容,假设”-R”选项后面跟有一个名目名,而不是一个文件名,它会被处理成”
16、-rpath”选项.-s”-strip-all”无视输出文件中全部的符号信息.-S”-strip-debug”无视输出文件中全部的调试符号信息.-t”-trace”打印”ld”处理的全部输入文件的名字.-T SCRIPTFILE”-script=SCRIPTFILE”把 SCRIPTFILE 作为连接脚本使用. 这个脚本会替代”ld”的缺省连接脚本,所以命令文件必需指定全部需要的东西以准确描述输出文件. 假设 SCRIPTFILE 在当前名目下不存在,”ld”会在”-L”选项指定的所知名目下去查找.多个”-T”选项会使容累积.-u SYMBOL”-undefined=SYMBOL”强制 SYM
17、BOL 在输出文件中作为一个无定义的符号被输入.这样做会有一些效果, 比方,会引发从标准库中连接更多的模块. ”-u”可以以不同的参数反复使用,以输入多个无定义的符号. 这个选项跟连接脚本命令中的”EXTERN”是等效的.-Ur”对于不是 C+的程序,这个选项跟”-r”是等效的: 它产生可重定位的输出,比方, 一个输出文件它可以再次作为”ld”的输入. 当连接 C+程序时,”-Ur”解析构造函数的引用,跟”-r”不同. 但假设在一些用”-Ur”连接过的文件上再次使用”-Ur”,它不会工作,由于一旦构造函数表被建立,它不能被添加容.请只在最终一遍连接的时候使用”-Ur”, 对其它的,只使用”-r
18、”.-unique=SECTION”对于全部匹配 SECTION 的输入节,在输出文件中都各自创立单独的节,或者,假设可选的通配符 SECTION参数丧失了,为每一个孤儿输入节创立一个输出节. 一个孤儿节是一个连接脚本中没有指定的节.你可以在命令行上屡次使用这个选项; 它阻挡对同名输入节的合并,在连接脚本中重载输出节安排.-v”-version”-V”显示”ld”的版本. ”-V”选项同时会列出支持的模拟器.-x”-discard-all”删除全部的本地符号.-X”-discard-locals”删除全部的临时本地符号.对于大多数目标平台,就是全部的名字以”L”开头的本地符号.-y SYMBO
19、L”-trace-symbol=SYMBOL”打印出全部 SYMBOL 消灭的被连接文件的名字. 这个选项可以被屡次使用. 在很多系统中,这在预先确定底线时很有必要.当你拥有一个未定义的符号,但不知道这个引用出自哪里的时候,这个选项很有用.-Y PATH”为缺省的库搜寻路径增加一条路径.这个选项是为了跟 Solaris 兼容.-z KEYWORD”能被识别的关键字包括”initfirst”, ”interpose”, ”loadfltr”,nodefaultlib”, nodelete”,nodlopen”, nodump”, now”, origin”,combreloc”, nocombr
20、eloc” andnocopyreloc”. 为了跟Solaris 兼容,全部其它的关键字都被无视. ”initfirst”标志一个对象,使它在运行时,在全部其他对象之前被初始化. ”interpose”标志一个对象,使它的符号表放在全部其他符号之前, 作为主要的执行者.”loadfltr”标志一个对象, 使它的过滤器在运行时马上被处理.”nodefaultlib” 标志一个对象,使在搜寻本对象所依靠的库时,无视全部缺省库搜寻路径. ”nodelete”标志一个对象,使它在运行时不会被从存中删除.”nodlopen”标志一个对象,使这个对象不行以通过”dlopen”载入.”nodum p”标志
21、一个对象,使它不能被”dldump”转储. ”now”标志一个对象,使它成为非懒散运行时绑定对象. ”orig in”标志一些可能含有$ORIGIN 的对象,”defs”不允许无定义符号. ”muldefs”允许重定义. ”comberlo c”组合多个重定位节,重排布它们,让动态符号可见. ”nocomberloc”使多个重定位节组合无效. ”nocopy reloc”使重定位拷贝后的结果无效.-”-start-group ARCHIVES -end-group”ARCHIVES 应当是一个关于档案文件的列表. 它们可以是显式的文件名,或者”-l ”选项.这些指定的档案文件会被多遍搜寻,直到
22、没有的无定义引用被创立. 通常,一个档案文件只会被搜寻一次. 但假设这个档案文件中的一个符号需要被用来解析一个档案中的目标引用到的无定义的符号,而这个符号在命令行上的后面某个档案文件中消灭, 连接器不能解析这个引用. 把这些档案文件分组后,它们都可被反复搜寻直到全部可能的引用都被解析了为止.使用这个选项有一个很大的运行开销. 只有在无法避开在多个档案文件中使用循环引用时才用它.-accept-unknown-input-arch”-no-accept-unknown-input-arch”告知连接器承受那些架构不能被识别的输入文件. 但前提假设是用户知道他们在做什么,并且是有意要连接这些未知的
23、输入文件. 在版本 2.14 之前,这个是连接器的缺省行为. 从版本 2.14 以后的,缺省行为是拒绝这类输入文件, 所以-accept-unknown-input-arch”选项被用来恢复旧的行为.-assert KEYWORD”这个选项被无视,只是用来跟 SunOS 保持兼容.-Bdynamic”-dy”-call_shared”连接动态库. 这个仅仅在支持共享库的平台上有用.在这些平台上,这个选项通常是默认行为. 这个选项的不同形式是为了跟不同的系统保持兼容. 你可以在命令行上屡次使用这个选项:它影响紧随其后的”-l”选项的库搜寻.-Bgroup”在动态节的”DT_FLAGS_1”入口上
24、设置”DF_1_GROUP”标志.这会让运行时连接器在处理在这个对象和它的相关局部搜寻时只在组中. ”-no-undefined”是隐式的. 这个选项只在支持共享库的 ELF 平台上有用.-Bstatic”-dn”-non_shared”-static”不连接共享库. 这个仅仅在支持共享库的平台上有用. 这个选项的不同形式是为了跟不同的系统保持兼容.你可以在命令行上屡次使用这个选项:它影响紧随其后的”-l”选项的库搜寻.-Bsymbolic”当创立一个共享库时, 把对全局符号的引用绑定到共享库中的定义, 通常, 一个连接共享库的程序重载共享库中的定义是可能的. 这个选项只在支持共享库的 ELF
25、 平台上有用.-check-sections”-no-check-sections”让连接器在节地址被安排后不要去检查节地址是否重叠.通常,连接器会执行这种检查,假设它觉察了任何重叠,它会产生相应的错误信息. 连接器知道也允许节的重叠. 缺省的行为可以使用命令行开关-check-sections”来恢复.-cref”输出一个穿插引用表. 假设一个连接器位图文件被产生, 穿插引用表被打印到位图文件. 否则, 它被打印到标准输出.表的格式相当的简洁, 所以,假设需要,可以通过一个脚本很轻易地处理它. 符号是以名字被打印输出,存储. 对于每一个符号,给出一个文件名列表. 假设符号被定义了, 列出的第
26、一个文件是符号定义的所在.接下来的文件包含符号的引用.-no-define-common”这个选项限制对一般符号的地址安排. 脚本命令INHIBIT_COMMON_ALLOCATION” 具有同等的效果.-no-define-common”选项允许从输出文件的类型选择中确定对一般符号的地址安排; 否则, 一个非重定位输出类型强制为一般符号安排地址. 使用”-no-define-common”允许那些从共享库中引用的一般符号只在主程序中被安排地址. 这会消退在共享库中的无用的副本的空间, 同时,也防止了在有多个指定了搜寻路径的动态模块在进展运行时符号解析时引起的混乱.-defsym SYMBOL
27、=EXPRESSION”在输出文件中建立一个全局符号,这个符号拥有一个 EXPRESSION 指定确实定地址. 你可以屡次使用这个选项定义多个符号. EXPRESSION 支持一个受限形式的算术运算:你可以给出一个十六进制常数或者一个已存在符号的名字,或者使用”+”和”-”来加或减十六进制常数或符号. 假设你需要更多的表达式,可以考虑在脚本中使用连接器命令语言, 留意在 SYMBOL,=和 EXPRESSION 之间不允许有空格.-demangle=style”-no-demangle”这些选项把握是否在错误信息和其它的输出中重组符号名. 当连接器被告知要重组, 它会试图把符号名以一种可读的形
28、式的呈现: 假设符号被以目标文件格式使用,它剥去前导的下划线, 并且把 C+形式的符号名转换成用户可读的名字. 不同的编译器有不同的重组形式. 可选的重组形式参数可以被用来为你的编译器选择一个相应的重组形式. 连接器会以缺省形式重组直至环境变量COLLECT_NO_DEMANGLE”被设置. 这些选项可以被用来重载缺省的设置.-dynamic-linker FILE”设置动态连接器的名字. 这个只在产生动态连接的 ELF 可执行文件时有效. 缺省的动态连接器通常是正确的; 除非你知道你在干什么,不要使用这个选项.-embedded-relocs”这个选项只在连接 MIPS 嵌入式 PIC 代码
29、时有效, 这些代码必需是由 GNU 的编译器跟汇编器通过-membedded-pic选项生成的. 它导致连接器产生一个表,这个表被用来在运行时重定位全部的被静态初始化为指针值的数据.-fatal-warnings”把全部的警告视为错误.-force-exe-suffix”确保输出文件有一个.exe 后缀.假设一个被成功完整连接的输出文件不带有一个”.exe”或”.dll”后缀, 这个选项确保连接器把输出文件拷贝成带有”.exe”后缀的同名文件. 这个选项在使用微软系统来编译未经修改的 Unix 的 makefile 时很有用, 由于有些版本的 windows 不会运行一个不带有”.exe”后缀
30、的映像.-no-gc-sections”-gc-sections”允许对未使用的输入节的碎片收集. 在不支持这个选项的平台上,被无视. 这个选项不能跟 ”-r”选项共存也不能被用来进展动态连接. 缺省行为可以用-no-gc-sections”进展恢复.-help”在标准输出上打印一个命令行选项概要,然后退出.-target-help”打印一个全部目标平台相关的选项的概要,然后退出.-Map MAPFILE”打印一个连接位图到文件 MAPFILE 中. 参阅上面关于”-M”选项的描述.-no-keep-memory”ld”通常会以速度优先于存使用的方式优化程序,这是通过把输入文件的符号表放在存缓
31、冲中实现的,这个选项告知”ld”以存使用优先来优化, 尽可能的减小符号表的重读. 这在”ld ”在连接一个大文件时超出存限制时有用.-no-undefined”-z defs”通常,当创立一个非符号共享库时, 无定义的符号允许消灭,并留待运行时连接器去解决. 这个选项关闭这样的无定义符号的使用. 开关-no-allow-shlib-undefined”把握共享对象被连接进共享库时的行为.-allow-multiple-definition”-z muldefs”通常,当一个符号被定义屡次时, 连接器会报告一个致命错误. 这些选项允许重定义并且第一个定义被使用-allow-shlib-undef
32、ined”-no-allow-shlib-undefined”允许或不允许无定义符号存在于共享对象中. 这个开关的设置会重载”- no-undefined”,这里只关注共享对象. 这样,假设”-no-undefined”被设置,但”-no-allow-shlib-undef ined”未被设置, 连锁反响是存在于规章对象文件中的无定义的符号会引起一个错误,但是在共享对象中的未定义的符号会被无视.把-allow-shlib-undefined”设置为缺省的缘由是在连接时指定的共享对象并不愿定是载入时可载入的那个,所以,符号可能要到载入时间才被解析.-no-undefined-version”通常
33、当一个符号有一个未定义的版本时,连接器会无视它. 这个选项不允许符号有未定义的版本,并且碰到这种状况,会报告一个严峻错误.-no-warn-mismatch”通常, 假设你由于一些缘由,企图把一些不匹配的输入文件连接起来的时候,”ld ”会给出一个错误,可能这些文件是由于由不同的处理器编译. 这个选项告知”ld”应当对这样的错误默认允许. 这个选项必需留神使用.-no-whole-archive”为后面的档案文件关闭”-whole-archive”选项的影响.-noinhibit-exec”当一个可执行文件还可以使用时,就保存它. 通常,连接器假设在连接过程中遇到了错误,就不会产生输出文件;当
34、它遇上错误时,它会退出而不写输出文件.-nostdlib”仅搜寻那些在命令行上显式指定的库路径. 在连接脚本中指定的库路径都被无视.-oformat OUTPUT-formAT”ld”可以被配置为支持多于一种的目标文件. 假设你的”ld”以这种方式被配置, 你可以使用”-oformat”选项来指定输出目标文件的二进制格式.就算”ld”被配置为支持多种目标格式, 你也不必指定这个项,因为”ld”应当被配置为把最常用的输出格式作为默认格式. OUTPUT-formAT 是一个文本串,是被 BFD 库支持的一个特定格式的名字.脚本命令”OUTPUT_formAT”也可以指定输出格式,但这个选项可以掩
35、盖它.-qmagic”这个选项被无视,只是为了跟 Linux 保持兼容.-Qy”这个选项被无视,只是为了跟 SVR4 保持兼容.-relax”一个机器相关的选项. 只有在少数平台上,这个选项被支持.在某些平台上,”-relax”选项在连接器解析程序中的地址时执行可能的全局优化, 比方松散地址模式和在输出文件中合成的指令.在某些平台上,连接时全局优化会进展符号调试导致程序不能运行. 在不支持这个选项的平台上,”-relax”被承受,但被无视.-retain-symbols-file FILENAME”只保存在 FILENAME 中列出的那些符号,丢弃全部其他的. FILENAME 是一个简洁地平
36、坦模式文件, 一个符号占一行.这个选项在那些会逐步积存起一个大的全局符号表的系统中会很有用,它能有效地节约存空间.”-retain-symbols-file”不丢弃未定义的符号,和需要重定位的符号.你可能在命令行上只指定”-retain-symbol-file”一次, 它掩盖”-s”和”-S”的功能.-rpath DIR”为运行时库的搜寻路径增加一个名目. 这个在连接带有共享库的 ELF 可执行文件时有用. ”-rpath”的全部参数会被连接起来传递给运行时连接器, 运行时连接器在运行时用它们定位共享对象. ”-rpath”选项在定位那些在连接参数指定的共享对象需要的共享对象时也很有用; 参阅
37、关于”-rpath-link”选项的描述, 假设在连接一个 ELF 可执行文件时不使用”-rpath”选项,那些环境变量”LD_RUN_PATH”选项就会被使用.”-rptah”选项也可以使用在 SunOS 上. 缺省地,在 SunOS 上,连接器会从全部的”-L”选项中形成一个运行时搜寻路径.假设使用了”-rpath”选项, 那运行时搜寻路径就只从”-rpath”选项中得到, 无视”-L”选项. 这在使用 GCC 时格外有用, 它会用上很多的”-L”选项,而这些路径很可能就是 NFS 挂上去的文件系统中.为了同 ELF 的连接器兼容, 假设”-R”选面后面跟有一个名目名, 而不是一个文件名,
38、那它也会被处理成”-rpath”选项.-rpath-link DIR”当在 SunOS 上使用 ELF 时,一个共享库可能会用到另一个共享库. 当”ld -share ”把一个共享库作为一个输入文件连接时就有可能发生这种状况.当一个连接器在作非共享,不行重定位连接时,假设遇上这种依靠状况,它会自动定位需要的共享库,然后把它包含在连接中, 假设在这种状况中,它没有被显式包含, 那”-rpath-link”选项指定优先搜寻的一组路径名.这个选项必需留神使用,由于它会掩盖那些可能已经被编译进共享库中的搜寻路径. 在这种状况下,它就有可能使用一个非部的不同的搜寻路径.连接器使用下面的搜寻路径来定位需要
39、的共享库:1. 全部由”-rpath-link”选项指定的搜寻路径.2. 全部由”-rpath”指定的搜寻路径. ”-rpath”跟”-rpath_link”的不同之处在于,由”-rpath”指定的路径被包含在可执行文件中,并在运行时使用, 而”-rpath-link”选项仅仅在连接时起作用. 它只用于本地连接器.3. 在一个 ELF 系统中, 假设”-rpath”和”rpath-link”选项没有被使用, 会搜寻环境变量”LD_RUN_PATH”的容.它也只对本地连接器起作用.4. 在 SunOS 上, ”-rpath”选项不使用, 只搜寻全部由”-L”指定的目录.5. 对于一个本地连接器,
40、环境变量”LD_LIBRARY_PATH”的容被搜寻.6. 对于一个本地 ELF 连接器,共享库中的DT_RUNPATH”和DT_RPATH” 操作符会被需要它的共享库搜寻. 假设”DT_RUNPATH”存在了, 那”DT_RPATH”就会被无视.7. 缺省名目, 常规的,如”/lib”和”/usr/lib”.8. 对于 ELF 系统上的本地连接器, 假设文件”/etc/ld.so.conf”存在, 这个文件中有的名目会被搜寻.假设需要的共享库没有被找到, 那连接器会发出一条警告信息,并连续执行连接.-shared”-Bshareable”创立一个共享库. 这个选项只在 ELF, XCOFF
41、和 SunOS 平台上有用。 在 SunOS 上,假设”-e”选项没有被使用,并在连接中有未定义的符号,连接器会自动创立一个共享库,-sort-common”这个选项告知”ld”当它把一般符号放到相应的输出节中时按大小进展排序。排在最前面的是全部的一字节符号,然后是全部的二字节,然后是全部的四字节, 然后是其它的。这是为了避开由于对齐约束而在符号间产生的断裂-split-by-file SIZE”跟”-split-by-reloc”相像,但在 SIZE 到达时,为每一个输入文件创立一个的输出节。假设没有给出,SIZE 缺省地设置为 1-split-by-reloc COUNT”试图在输出文件中
42、创立节外的节,这样就没有单个的输出节含有多于 COUNT 个重定位符。这在产生巨大的用于 COFF 格式的实时核的可重定位文件时格外有用;由于 COFF 不能在一个节中表示多于 65 535 个重定位。 留意,这在不支持专有节的目标文件格式中会失败,连接器不会把单个输入节分割进展重安排, 所以,假设单个输入节含有多于 COUNT个重定位符, 那一个输出节会含有同样多的可重定位符。COUNT 缺省被设为 327 68.-stats”计算并显示关于连接器操作的统计信息, 比方执行时间,存占用等.-traditional-format”对于某些目标平台, ”ld”的输出会跟某些面有的连接器的输出有所
43、不同. 这个开关要求”ld”使用传统的格式.比方, 在 SunOS 上, ”ld”会把符号串表中的两上完全一样的入口合并起来. 这可以把一个带有调试信息的输出文件的大小减小百发之三十. 不幸地是, SunOS 的”dbx”程序不能读取这个输出的程序.”-trafitinal-format”开关告知”ld”不要把一样的入口合并起来.-section-start SECTIONNAME=ORG”通过指定 ORG, 指定节在输出文件中确实定地址. 你可以屡次使用这个选项来定位多个节. ORG 必需是一个十六进制整数; 为了跟基他的连接器兼容,你可以无视前导”0x”. 留意,在SECTIONNAME,
44、等号,ORG之间不允许有空格消灭.-Tbss ORG”-Tdata ORG”-Ttext ORG”跟-section-start 同义, 不过把SECTIONNAME 替换为”.bss”, ”.data”或”.text ”.-dll-verbose”-verbose”显示”ld”的版本号,并列出支持的连接器模拟. 显示哪些输入文件能被翻开,而哪些不能. 显示连接器使用的连接脚本.-version-script=VERSION-SCRIPTFILE”指定连接器的脚本的版本名. 这个常在创立一个需要指定附加的关于版本层次的信息的共享库时使用,这个选项只有支持共享库的 ELF 平台上有效.-warn-common”当一个一般符号跟另一个一般符号或会号定义合并起来时,警告. 类 Unix 连接器允许这个选项,有时比较有用, 但是在其他的操作系统上的连接器不允许这个. 这个选项可以让你在合并全局符号时觉察某些潜在的问题. 不幸的是,有些 C 库使用这项特性,所以你可能会像在你的程序中一样,在库中得到一些警告信息.