Linux常用命令ld怎么用
这篇文章主要为大家展示了“Linux常用命令ld怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux常用命令ld怎么用”这篇文章吧。
Linux常用命令ld 命令是二进制工具集 GNU Binutils 的一员,是 GNU 链接器,用于将目标文件与库链接为可执行文件或库文件
命令格式ld[OPTIONS]OBJFILES选项说明
ld 命令支持众多链接选项,但是大部分选项很少被使用,下面是 GNU ld 命令接受的选项。
-b指定目标代码输入文件的格式-Bstatic只使用静态库-Bdynamic只使用动态库-Bsymbolic把引用捆绑到共享库中的全局符号-c,--mri-script=为与MRI链接器兼容,ld接受由MRI命令语言编写的脚本文件--cref创建跨引用表-d,-dc,-dp即使指定了可重定位的输出文件(使用-r),也会为公共符号分配空间。脚本命令“FORCE_COMMON_ALLOCATION”具有相同的效果-defsym在输出文件中创建指定的全局符号-demangle在错误消息中还原符号名称-e使用指定的符号作为程序的初始执行点-E,--export-dynamic对于ELF格式文件,创建动态链接的可执行文件时,把所有符号添加到动态符号表-f,--auxiliary=对于ELF格式共享对象,设置DT_AUXILIARY名称-F,--filter=对于ELF格式共享对象,设置DT_FILTER名称。这告诉动态链接器,正在创建的共享对象的符号表应该用作共享对象名称的符号表的筛选器。-g被忽略。用于提供和其他工具的兼容性-h对于ELF格式共享对象,设置DT_SONAME名称-I,-dynamic-linker,--dynamic-linker=指定动态链接器。这仅在生成依赖动态链接库的ELF可执行文件时才有意义。默认的动态链接器通常是正确的,除非您知道正在做什么,否则不要使用该选项。-l,--library=把指定的库文件添加到要链接的文件清单-L,--library-path=searchdir把指定的路径添加添加到搜索库的目录清单-M,--print-map显示链接映射,用于诊断目的-Map=:将链接映射输出到指定的文件-m模拟指定的链接器-N,--omagic指定读取/写入文本和数据段-n,--nmagic关闭节的页面对齐,并禁用对共享库的链接。如果输出格式支持Unix样式的幻数,则将输出标记为"NMAGIC"-noinhibit-exec生成输出文件,即使出现非致命链接错误。通常,如果链接器在链接过程中遇到错误,它将不会生成输出文件。-no-keep-memoryld通常在内存中缓存输入文件的符号表来优化内存使用速度。此选项告诉ld不要缓存符号表。当链接大型可执行文件时,如果ld耗尽内存空间,则可能需要使用该选项-O对于非零的优化等级,ld将优化输出。此操作会比较耗时,应该在生成最终的结果时使用。-o,--output=指定输出文件的名称-oformat=指定输出文件的二进制格式-R,--just-symbols=从指定的文件读取符号名称和地址-r,--relocatable生成可重定位的输出(称为部分连接)-rpath=把指定的目录添加到运行时库搜索路径-rpath-link=指定搜索运行时共享库的目录-S,--strip-debug忽略来自输出文件的调试器符号信息-s,--strip-all忽略来自输出文件的所有符号信息-shared,-Bshareable创建共享库-split-by-file[=size]为每个目标文件在输出文件中创建额外的段大小达到size。size默认为1-split-by-reloc[=count]按照指定的长度在输出文件中创建额外的段--section-start==在输出文件中指定的地址定位指定的段-T,--script=使用scriptfile作为链接器脚本。此脚本将替换ld的默认链接器脚本(而不是添加到其中),因此脚本必须指定输出文件所需的所有内容。如果当前目录中不存在脚本文件,ld会在-L选项指定的目录中查找-Ttext=使用指定的地址作为文本段的起始点-Tdata=使用指定的地址作为数据段的起始点-Tbss=使用指定的地址作为bss段的起始点-t,--trace在处理输入文件时显示它们的名称-u,--undefined=强制指定符号在输出文件中作为未定义符号-v,-V,--version示ld版本号-warn-common当一个通用符号和另一个通用符号结合时发出警告-warn-constructors如果没有使用任何全局构造器,则发出警告-warn-once对于每个未定义的符号只发出一次警告-warn-section-align如果为了对齐而改动了输出段地址,则发出警告--whole-archive对于指定的存档文件,在存档中包含所有文件-X,--discard-locals删除所有本地临时符号-x,--discard-al删除所有本地符号4.常用示例
(1)链接目标文件生成可执行文件。给定C++目标文件test.o与main.o,生成可执行文件test.out。
ld/usr/lib64/crt1.o/usr/lib64/crti.o/usr/lib64/crtn.o/usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o/usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o-L/usr/lib/gcc/x86_64-redhat-linux/4.8.5-L/usr/lib64-L/usr/lib-lstdc++-lm-lgcc_s-lc-lgccmain.otest.o-otest.out
因为生成一个C++可执行文件,需要依赖很多系统库和相关的目标文件,比如C语言库libc.a,所以使用ld进行链接时,需要注意添加较长的命令选项,不然会报链接错误。使用g++ -v命令可以查看最后一行collect2使用的命令选项,进而了解生成可执行文所需的相关依赖。
g++-vmain.otest.o...usr/libexec/gcc/x86_64-redhat-linux/4.8.5/collect2--build-id--no-add-needed--eh-frame-hdr--hash-style=gnu-melf_x86_64-dynamic-linker/lib64/ld-linux-x86-64.so.2/usr/lib64/crt1.o/usr/lib64/crti.o/usr/lib64/crtn.o/usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o/usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o-L/usr/lib/gcc/x86_64-redhat-linux/4.8.5-L/usr/lib64-L/usr/lib-lstdc++-lm-lgcc_s-lc-lgccmain.otest.o
以上是“Linux常用命令ld怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。