ld中文使用手册完全版 联系客服

发布时间 : 星期日 文章ld中文使用手册完全版更新完毕开始阅读d1e6398a84868762caaed5a7

的连接脚本)指定的库路 径都被忽略.

`--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'.

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

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

`--version-script=VERSION-SCRIPTFILE'

指定连接器的脚本的版本名. 这个常在创建一个需要指定附加的关于版本层次的信息的共享库时使用,

这个选项只有支持共享库的ELF平台上有效.

`--warn-common'

当一个普通符号跟另一个普通符号或会号定义合并起来时,警告. 类Unix连接器允许这个选项,有时比

较实用, 但是在其他的操作系统上的连接器不允许这个. 这个选项可以让你在合并全局符号时发现某

些潜在的问题. 不幸的是,有些C库使用这项特性,所以你可能会像在你的程序中一样,在库中得到一些 警告信息.

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