Linux常用命令ld怎么用
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这篇文章主要为大家展示了"Linux常用命令ld怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Linux常用命令ld怎么用"这篇文章吧。Linux常
千家信息网最后更新 2025年01月25日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-memory ld 通常在内存中缓存输入文件的符号表来优化内存使用速度。此选项告诉 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 -lgcc main.o test.o -o test.out
因为生成一个C++可执行文件,需要依赖很多系统库和相关的目标文件,比如C语言库libc.a,所以使用ld进行链接时,需要注意添加较长的命令选项,不然会报链接错误。使用g++ -v命令可以查看最后一行collect2使用的命令选项,进而了解生成可执行文所需的相关依赖。
g++ -v main.o test.o ... usr/libexec/gcc/x86_64-redhat-linux/4.8.5/collect2 --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_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 -lgcc main.o test.o
以上是"Linux常用命令ld怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
文件
链接
符号
输出
命令
生成
名称
格式
动态
脚本
地址
目标
常用
对象
目录
内容
错误
全局
内存
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
黑群晖自建网络服务器
布偶猫数据库
凯尔洛瑞数据库
和平区机电网络技术维修价格
送给软件开发的一句话
软件开发行业年龄
ssh 进入服务器
联想服务器rd630
哪里有软件开发培训机构
软件开发质量控制点
高二网络技术技术教案
直观修改数据库
达内教育网络安全培训
重大节日网络安全报备总结
戴尔r540服务器报价
ios怎么保证网络安全
个人怎么保证网络安全
软件开发类属于固定资产吗
邹平机械软件开发报价
好贸网络技术公司
星辰沙海服务器
网络安全交流i春秋论坛
ftp文件服务器后期怎么迁移
机考网络技术应用考什么
网络技术利大于弊的资料
怎么清理移动数据库缓存
安徽软件开发网站推荐
如何找到需要做软件开发的
互联网金融信息科技
数据库设计课表格