ILD

ld (2): 命令行参数
作者:Herbert Yuan 邮箱:yuanjp89@163.com
发布时间:2017-7-8 站点:Inside Linux Development

本文罗列一些我现在理解的命令行参数。


-e entry, --entry=entry

使用entry符号,作为开始程序执行的入口,而不是缺省的入口点。如果没有entry符号,则链接器将其当做数字,作为入口地址。数字被翻译为10进制的;如果是0x开头,则被翻译为16进制的;如果是0开头,则是8进制。


-fini=name

创建可执行文件和共享文件时,设置DT_FINI为name指定的地址。缺省,链接器使用_fini。


-h name, -soname=name

创建共享目标文件时,指定DT_SONAME的值。


-init=name

创建可执行文件或者共享文件时,设置DT_INIT为name指定的地址,缺省,链接器使用_init。


-l namespace, --library=namespec

添加静态库或动态库,先搜索libnamespec.so的动态库,没有再搜索libnamespec.a的静态库。如果namespec是":filename"的形式,则直接搜索叫filename文件名的库。链接器只会搜索库一次,也就是说,如果库定义了一个符号,而目标文件在方面,不会往前搜索。所以通常被依赖者要放在后面。可以指定同一个库多次。


-L searchdir, --library-path=searchdir

指定库的搜索路径。如果使用-T指定了链接脚本,也指定了链接脚本的搜索路径。搜索路径是全局的,即使他们放在-l之后也同样生效。搜索的顺序,按照-L的顺序。


-o ouput, --output=output

指定输出文件的名字,如果没有指定为a.out。


-q, --emit-relocs

在完全链接的可执行文件中,保留可重定向section和内容。


-i, -r, --relocatable

产生可重定向目标文件。


-s, --strip-all

清掉输出文件的所有符号信息。


-T scriptfile, --script=scriptfile

指定链接器脚本,如果不在当前目录,则尝试搜索-L指定的目录。


-x, --discard-all

删除所有本地符号


-X, --discard-locals

删除所有本地临时符号,这些符号通常以系统定义的本地符号前缀开始,如.L


-( archives -), --start-group archives --end-group

archives是共享文件的列表,它们可以是显式的名字或者-l选项。这些文件将被搜索多次来解析未定义符号,通常只有循环依赖的时候才需要这种方式。


-Bdynmic, -dy, -call_shared

链接共享库,而不是静态库,影响后续的-l选项。


-Bstatic, -dn, -non_shared, -static

链接静态库,而不是共享库,影响后续的-l选项。


-Ifile, --dynamic-linker=file

指定动态链接器的名字。


--fatal-warnings, --no-fatal-warnings

是/否将所有的警告当做错误。影响之后的选项。


-M, --print-map, -Map=file

打印link map到stdout或者文件。


-nostdlib

只搜索命令行或者脚本指定的链接路径。


-pie, --pic-executable

创建位置独立可执行文件。


-rpath=dir

指定运行时库搜索路径。


-shared, -Bshareable

创建共享库。


--section-start=sectionname=org, -Tbss=org, -Tdata=org, -Ttext=org

定位section到绝对地址。org必须是16进制,可以省略前导0x。


-Ttext-segment=org, -Trodata-segment=org

设置text,rodata段的第一个字节到绝对地址。

Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.