GLD中文手册(3)

2019-08-20 19:25

`-z muldefs'

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

`--allow-shlib-undefined' `--no-allow-shlib-undefined'

允许(缺省)或不允许无定义符号存在于共享对象中. 这个开关的设置会重载'--no-undefined',这里只关注共享对象. 这样,如果'--no-undefined'被设 置,但'--no-allow-shlib-undefined'未被设置, 连锁反应是存在于规则对象文件中的无定义的符号会引起一个错误,但是在共享对象中的未定义的符号会被忽略.

把`--allow-shlib-undefined'设置为缺省的原因是在连接时指定的共享对象并不一定是载入时可载入的那个,所以,符号可能要到载入时间才被解析.

`--no-undefined-version'

通常当一个符号有一个未定义的版本时,连接器会忽略它. 这个选项不允许符号有未定义的版本,并且碰到这种情况,会报告一个严重错误.

`--no-warn-mismatch'

通常, 如果你因为一些原因,企图把一些不匹配的输入文件连接起来的时候, 'ld'会给出一个错误,可能这些文件是因为由不同的处理器编译. 这个选项告诉'ld'应当对这样的错误默认允许. 这个选项必须小心使用.

`--no-whole-archive'

为后面的档案文件关闭'--whole-archive'选项的影响.

`--noinhibit-exec'

当一个可执行文件还可以使用时,就保留它. 通常,连接器如果在连接过程中遇 到了错误,就不会产生输出文件;当它遇上错误时,它会退出而不写输出文件.

`-nostdlib'

仅搜索那些在命令行上显式指定的库路径. 在连接脚本中(包含在命令行上指定的连接脚本)指定的库路径都被忽略.

`--oformat OUTPUT-FORMAT'

'ld'可以被配置为支持多于一种的目标文件. 如果你的'ld'以这种方式被配置,你可以使用'--oformat'选项来指定输出目标文件的二进制格式.就算'ld'被配置为支持多种目标格式,你也不必指定这个项,因为'ld'应当被配置为把最常用的输出格式作为默认格式. OUTPUT-FORMAT是一个文本串,是被BFD库支持的一个特定格式的名字.脚本命令'OUTPUT_FORMAT'也可以指定输出格式,但这个 选项可以覆盖它.

`-qmagic'

这个选项被忽略,只是为了跟Linux保持兼容. `-Qy'

这个选项被忽略,只是为了跟SVR4保持兼容.

`--relax'

一个机器相关的选项. 只有在少数平台上,这个选项被支持.

在某些平台上,'--relax'选项在连接器解析程序中的地址时执行可能的全局优化, 比如松散地址模式和在输出文件中合成新的指令.

在某些平台上,连接时全局优化会进行符号调试导致程序不能运行. 在不支持这个选项的平台上,'--relax'被接受,但被忽略.

`--retain-symbols-file FILENAME'

只保留在FILENAME中列出的那些符号,丢弃所有其他的. FILENAME是一个简单地平坦模式文件, 一个符号占一行.这个选项在那些会逐步积累起一个大的全局符号表的系统中(比如 VxWorks)会很有用,它能有效地节约内存空间.

'--retain-symbols-file'不丢弃未定义的符号,和需要重定位的符号.

你可能在命令行上只指定'--retain-symbol-file'一次, 它覆盖'-s'和'-S'的功能.

`-rpath DIR'

为运行时库的搜索路径增加一个目录. 这个在连接带有共享库的ELF可执行文件时有用. '-rpath'的所有参数会被连接起来传递给运行时连接器, 运行时连接器在运行时用它们定位共享对象. '-rpath'选项在定位那些在连接参数指定的共享对象需要的共享对象时也很有用; 参阅关于'-rpath-link'选项的描述, 如果在连接一个ELF可执行文件时不使用'-rpath'选项,那些环境变量'LD_RUN_PATH'选项就会被使用.

'-rptah'选项也可以使用在SunOS上. 缺省地,在SunOS上,连接器会从所有的'-L'选项中形成一个运行时搜索路径.如果使用了'-rpath'选项, 那运行时搜 索路径就只从'-rpath'选项中得到, 忽略'-L'选项. 这在使用GCC时非常有用, 它会用上很多的'-L'选项,而这些路径很可能就是NFS挂上去的文件系统中. 为了同ELF的连接器兼容, 如果'-R'选面后面跟有一个目录名, 而不是一个文件名,那它也会被处理成'-rpath'选项.

`-rpath-link DIR'

当在SunOS上使用ELF时,一个共享库可能会用到另一个共享库. 当'ld -share'把一个共享库作为一个输入文件连接时就有可能发生这种情况. 当一个连接器在作非共享,不可重定位连接时,如果遇上这种依赖情况,它会自动定位需要的共享库,然后把它包含在连接中, 如果在这种情况中,它没有被显式包含, 那'-rpath-link'选项指定优先搜索的一组路径名.

这个选项必须小心使用,因为它会覆盖那些可能已经被编译进共享库中的搜索路径. 在这种情况下,它就有可能使用一个非内部的不同的搜索路径. 连接器使用下面的搜索路径来定位需要的共享库: 1. 所有由'-rpath-link'选项指定的搜索路径.

2. 所有由'-rpath'指定的搜索路径. '-rpath'跟'-rpath_link'的不同之处在于,由'-rpath'指定的路径被包含在可执行文件中,并在运行时使用, 而'-rpath-link'选项仅仅在连接时起作用. 它只用于本地连接器.

3. 在一个ELF系统中, 如果'-rpath'和'rpath-link'选项没有被使用, 会搜索环境变量'LD_RUN_PATH'的内容.它也只对本地连接器起作用.

4. 在SunOS上, '-rpath'选项不使用, 只搜索所有由'-L'指定的目录. 5. 对于一个本地连接器,环境变量'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和SunOS平台上有用。 在SunOS上,如果'-e'选项没有被使用,并在连中有未定义的符号,连接器会自动创建一 个共享库,

`--sort-common'

这个选项告诉'ld'当它把普通符号放到相应的输出节中时按大小进行排序。排在最前面的是所有的一字节符号,然后是所有的二字节,然后是所有的四字节,然后是其它的。 这是为了避免因为对齐约束而在符号间产生的断裂

`--split-by-file [SIZE]'

跟'--split-by-reloc'相似,但在SIZE达到时,为每一个输入文件创建一个新的输出节。如果没有给出,SIZE缺省地设置为1

`--split-by-reloc [COUNT]'

试图在输出文件中创建节外的节,这样就没有单个的输出节含有多于COUNT个重定位符。这在产生巨大的用于COFF格式的实时内核的可重定位文件时非常有用;

因为COFF不能在一个节中表示多于65535个重定位。 注意,这在不支持专有节的目标文件格式中会失败,连接器不会把单个输入节分割进行重分配, 所以,如果单个输入节含有多于COUNT个重定位符, 那一个输出节会含有同样多的可重定位符。COUNT缺省被设为32768.

`--stats'

计算并显示关于连接器操作的统计信息, 比如执行时间,内存占用等.

`--traditional-format'

对于某些目标平台, 'ld'的输出会跟某些面有的连接器的输出有所不同. 这个开关要求'ld'使用传统的格式.

比如, 在SunOS上, 'ld'会把符号串表中的两上完全相同的入口合并起来. 这可以把一个带有调试信息的输出文件的大小减小百发之三十. 不幸地是, SunOS的'dbx'程序不能读取这个输出的程序(gdb就没有问题). '--trafitinal-format'开关告诉'ld'不要把相同的入口合并起来.

`--section-start SECTIONNAME=ORG'

通过指定ORG, 指定节在输出文件中的绝对地址. 你可以多次使用这个选项来定位多个节. ORG必须是一个十六进制整数; 为了跟基他的连接器兼容,你可以忽略前导'0x'. 注意,在SECTIONNAME,等号,ORG之间不允许有空格出现.

`-Tbss ORG' `-Tdata ORG' `-Ttext ORG'

跟-section-start同义, 不过把SECTIONNAME替换为'.bss', '.data'或 '.text'. --

标 题: GLD中文手册--(三)

`--dll-verbose' `--verbose'

显示'ld'的版本号,并列出支持的连接器模拟. 显示哪些输入文件能被打开,而哪些不能. 显示连接器使用的连接脚本.

`--version-script=VERSION-SCRIPTFILE'

指定连接器的脚本的版本名. 这个常在创建一个需要指定附加的关于版本层次的信息的共享库时使用,这个选项只有支持共享库的ELF平台上有效.

`--warn-common'

当一个普通符号跟另一个普通符号或会号定义合并起来时,警告. 类Unix连接器允许这个选项,有时比较实用, 但是在其他的操作系统上的连接器不允许这个. 这个选项可以让你在合并全局符号时发现某些潜在的问题. 不幸的是,有些C库使用这项特性,所以你可能会像在你的程序中一样,在库中得到一些警告信息.

这里给出三种类型的全局符号的解释(用C语言):

`int i = 1;'一个定义, 它会存在于输出文件中的已初始化数据节. `extern int i;'

一个未定义符号,它不占用空间. 必须在另外某一处对它有一个定义,或一个普通符号 `int i;'

一个普通符号.如果对于一个变量只有(一个或多个)普通符号, 它进入输出文件的未初始化数据域. 连接器会把同一变量的多个普通符号合并成一个单一的符号. 如果他们有不同的大小, 它采用最大的一个. 如果是对同一变量的定义,连接器把一个普通符号转化为一个声明.

'--warn-common'选项可以产生五种类型的警告. 每种警告由两行组成: 第一行描述遇到的符号, 第二行描述遇到的前一个具有相同名字的符号. 一个或两个都可能成为普通符号.

1. 把一个普通符号转化为一个引用, 因为这个符号已经有一个定义了.FILE(SECTION): warning: common of `SYMBOL'overridden by definition FILE(SECTION): warning: defined here

2. 把一个普通符号转化为一个引用,因为遇到了第二个关于符号的定义. 这跟前一种情况相同,除了符号遇到的顺序相反.

FILE(SECTION): warning: definition of `SYMBOL' overriding common

FILE(SECTION): warning: common is here

3. 把一个普通符号跟前一个相同大小的普通符号合并. FILE(SECTION): warning: multiple common of `SYMBOL'

FILE(SECTION): warning: previous common is here

4. 把一个普通符号跟前一个更大的普通符号合并.

FILE(SECTION): warning: common of `SYMBOL' overridden by larger common

FILE(SECTION): warning: larger common is here

5. 把一个普通符号跟前一个更小的普通符号合并. 这跟前一种情况相同, 除了遇到的符号的顺序不同.

FILE(SECTION): warning: common of `SYMBOL' overriding smaller common

FILE(SECTION): warning: smaller common is here

`--warn-constructors'

如果有全局结构体被使用到了,警告. 这只对很少的一些目标文件格式有用. 对于COFF或ELF格式, 连接器不同探测到全局结构体的使用.

`--warn-multiple-gp'

如果在输出文件中,需要多个全局指针值,警告. 这只对特定的处理器有意义, 比如Alpha. 特别的,有些处理器在特定的节中放入很大的常数值. 一个特殊的寄存器(全局指针)指向这个节的中间部分, 所以通过一个基地址寄存器相


GLD中文手册(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:月令司令司权司命

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: