Linux常用命令ld怎么用
发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇文章主要为大家展示了"Linux常用命令ld怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Linux常用命令ld怎么用"这篇文章吧。Linux常
千家信息网最后更新 2024年11月20日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安全错误
数据库的锁怎样保障安全
杭州九旺网络技术有限公司
平时数据库的安全隐患
数据库id自增的意义
网络安全等各方面安全工作
做好网络安全整改工作
软件开发公司不给开对公账户
西集网络安全产业园对西集的影响
云上服务器安全
远程连接家用服务器
管理服务器ssr
服务器数据中心板块股票
软件开发企业地区分布
海康管理服务器异常断电
党政网络安全自查表
软件开发如何做好接口
在发生危害网络安全事件时
如何降低网络安全风险
上位机C 软件开发案例
中国网络安全宣传知识
中国联通网络技术研究院合作
服务器ip租用
服务器 安全性
数据库系统工程师知识点
pg数据库需要什么插件
云服务器国外免费
四川省委网络安全工作
杰奇忘了写数据库密码咋办
政府部门网络安全市场投入
如何使用万德数据库
网络安全模型有哪些几个