前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux命令(65)——ld命令

Linux命令(65)——ld命令

作者头像
恋喵大鲤鱼
发布于 2019-04-18 07:25:15
发布于 2019-04-18 07:25:15
17.8K00
代码可运行
举报
文章被收录于专栏:C/C++基础C/C++基础
运行总次数:0
代码可运行

1.命令简介

ld命令是二进制工具集GNU Binutils的一员,是GNU链接器,用于将目标文件与库链接为可执行程序或库文件。

2.命令格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ld [options] <objfile...>

3.选项说明

ld命令支持众多链接选项,但是大部分选项很少被使用,下面是GNU ld命令接受的选项。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-b <input-format>:指定目标代码输入文件的格式
-Bstatic:只使用静态库
-Bdynamic:只使用动态库
-Bsymbolic:把引用捆绑到共享库中的全局符号
-c <MRI-commandfile>,--mri-script=<MRI-commandfile>:为与MRI链接器兼容,ld接受由MRI命令语言编写的脚本文件
--cref:创建跨引用表
-d,-dc,-dp:即使指定了可重定位的输出文件(使用-r),也会为公共符号分配空间。脚本命令“FORCE_COMMON_ALLOCATION”具有相同的效果
-defsym:在输出文件中创建指定的全局符号
-demangle:在错误消息中还原符号名称
-e <entry>:使用指定的符号作为程序的初始执行点
-E,--export-dynamic:对于ELF格式文件,创建动态链接的可执行文件时,把所有符号添加到动态符号表
-f <name>,--auxiliary=<name>:对于ELF格式共享对象,设置 DT_AUXILIARY 名称
-F <name>,--filter=<name>:对于ELF格式共享对象,设置 DT_FILTER 名称。这告诉动态链接器,正在创建的共享对象的符号表应该用作共享对象名称的符号表的筛选器。
-g:被忽略。用于提供和其他工具的兼容性
-h:对于ELF格式共享对象,设置 DT_SONAME 名称
-I<file>,--dynamic-linker=<file>:指定动态链接器。这仅在生成动态链接的ELF可执行文件时才有意义。默认的动态链接器通常是正确的,除非您知道正在做什么,否则不要使用该选项。
-l <namespec>,--library=<namespec>:把指定的库文件添加到要链接的文件清单
-L <searchdir>,--library-path=searchdir:把指定的路径添加添加到搜索库的目录清单
-M,--print-map:显示链接映射,用于诊断目的
-Map=<mapfile>:	将链接映射输出到指定的文件
-m <emulation>:	模拟指定的链接器
-N,--omagic:	指定读取/写入文本和数据段
-n,--nmagic:	关闭节的页面对齐,并禁用对共享库的链接。如果输出格式支持Unix样式的幻数,则将输出标记为"NMAGIC"
-noinhibit-exec:生成输出文件,即使出现非致命链接错误。通常,如果链接器在链接过程中遇到错误,它将不会生成输出文件。
-no-keep-memory:ld通常在内存中缓存输入文件的符号表来优化内存使用速度。此选项告诉ld不要缓存符号表。当链接大型可执行文件时,如果ld耗尽内存空间,则可能需要使用该选项
-O <level>:对于非零的优化等级,ld将优化输出。此操作会比较耗时,应该在生成最终的结果时使用。
-o <output>,--output=<output>:指定输出文件的名称
-oformat=<output-format>:指定输出文件的二进制格式
-R <filename>,--just-symbols=<filename>:从指定的文件读取符号名称和地址
-r,--relocatable:生成可重定位的输出(称为部分连接)
-rpath=<dir>:把指定的目录添加到运行时库搜索路径
-rpath-link=<dir>:指定搜索运行时共享库的目录
-S,--strip-debug:忽略来自输出文件的调试器符号信息
-s,--strip-all:忽略来自输出文件的所有符号信息
-shared,-Bshareable:创建共享库
-split-by-file[=size]:为每个目标文件在输出文件中创建额外的段大小达到size。size默认为1
-split-by-reloc[=count]:按照指定的长度在输出文件中创建额外的段
--section-start=<sectionname>=<org>:在输出文件中指定的地址定位指定的段
-T <scriptfile>,--script=<scriptfile>:使用scriptfile作为链接器脚本。此脚本将替换ld的默认链接器脚本(而不是添加到其中),因此脚本必须指定输出文件所需的所有内容。如果当前目录中不存在脚本文件,“ld”会在-L选项指定的目录中查找
-Ttext=<org>:使用指定的地址作为文本段的起始点
-Tdata=<org>:使用指定的地址作为数据段的起始点
-Tbss=<org>:使用指定的地址作为bss段的起始点
-t,--trace:在处理输入文件时显示它们的名称
-u <symbol>,--undefined=<symbol>:强制指定符号在输出文件中作为未定义符号
-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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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使用的命令选项,进而了解生成可执行文所需的相关依赖。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

参考文献

[1]ld manual [2]GNU Binutils [3]使用ld命令链接目标文件生成可执行文件

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年04月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(七) -> JS动画(二)
通过createAnimator创建一个动画对象,通过设置参数options来设置动画的属性。
枫叶丹
2025/03/04
630
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(七) -> JS动画(二)
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(七) -> JS动画(一)
通过调用animate方法获得animation对象,animation对象支持动画属性、动画方法和动画事件。
枫叶丹
2025/03/01
610
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(七) -> JS动画(一)
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
HML(HarmonyOS Markup Language)是一套类HTML的标记语言,通过组件,事件构建出页面的内容。页面具备数据绑定、事件绑定、列表渲染、条件渲染和逻辑控制等高级能力。
枫叶丹
2025/01/27
840
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 构建用户界面(二)
添加交互可以通过在组件上关联事件实现。本节将介绍如何用div、text、image组件关联click事件,构建一个如下图所示的点赞按钮。
枫叶丹
2025/02/04
680
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 构建用户界面(二)
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> stepper
Stepper组件默认填充父容器,通过border和background-color设置边框、背景色。
枫叶丹
2025/02/11
750
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> stepper
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> swiper
Swiper组件当不开启循环播放(loop="false")时添加自动播放属性(autoplay),设置自动播放时播放时间间隔(interval),页面会自动切换并停留在最后一个子组件页面。添加digital属性启用数字导航点,设置切换时为渐隐滑动效果(scrolleffect="fade")。
枫叶丹
2025/02/21
850
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> swiper
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 构建用户界面(一)
组件(Component)是构建页面的核心,每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。组件之间相互独立,随取随用,也可以在需求相同的地方重复使用。
枫叶丹
2025/02/02
830
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 构建用户界面(一)
【愚公系列】2022年01月 华为鸿蒙OS-04-容器组件(badge、dialog、div)(JS开发版)
文章目录 容器组件 一、badge 1.HML代码 2.CSS代码 3.JS代码 4.效果 二、dialog 1.HML代码 2.CSS代码 3.JS代码 4.效果 三、div 1.布局 1.1HML代码 1.2 CSS代码 1.3 效果 2.事件 2.1 拖拽事件 2.2 手指捏合事件 ---- 容器组件 一、badge 1.HML代码 <div class="container"> <badge class="badge" config="{{badgeConfig}}" visibl
愚公搬代码
2022/01/24
9230
【愚公系列】2022年01月 华为鸿蒙OS-04-容器组件(badge、dialog、div)(JS开发版)
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> tabs
Tabs默认展示索引为index的标签及内容。通过设置vertical属性使组件纵向展示。
枫叶丹
2025/02/18
650
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> tabs
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)
List是用来显示列表的组件,包含一系列相同宽度的列表项,适合连续、多行地呈现同类数据。
枫叶丹
2025/02/06
580
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(六) -> CSS动画
在关键帧(Keyframes)中动态设置父组件的width和height,实现组件变大缩小。子组件设置scale属性使父子组件同时缩放,再设置opacity实现父子组件的显示与隐藏。
枫叶丹
2025/02/27
940
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(六) -> CSS动画
Vue框架Element UI教程-出现和隐藏动画(三)
今天继续写组件的运用相关例子 点击按钮的时候,元素会呈现一个出现和隐藏的动画功能。
王小婷
2019/05/20
1.7K0
html结合css滑稽笑脸表情包实现思路
菜菜有点菜
2024/05/30
2810
html结合css滑稽笑脸表情包实现思路
基于vue封装的pc端swiper组件
基于vue封装的pc端swiper组件 话不多说,直接上代码 App.vue <template> <div> <div class="container"> <h2>Pc端轮播图</h2> <div v-if="imgList.length>0"> <Swiper :delay="delay" :duration="duration" :mode="mode"> <swiper-item v-for="(item,index) in
hss
2022/02/25
9340
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(五) -> Svg
通过设置width、height、x、y和viewBox属性为Svg设置宽度、高度、x轴坐标、y轴坐标和Svg视口。
枫叶丹
2025/02/24
870
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(五) -> Svg
乐淘网侧边栏动画
  在乐淘网买衣服时无意中发现了侧边栏的动画效果,没禁住诱惑尝试了一下,还挺难,不过做出来了。如有侵权请联系删除
我不是费圆
2020/12/17
7170
「HTML+CSS」--自定义加载动画【046】
文章仅作为学习笔记,记录从0到1的一个过程。希望对您有所帮助,如有错误欢迎小伙伴指正~
海轰Pro
2021/06/10
3660
水波纹按钮动画
代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> .login { display: flex; align-items: center; justify-content: center; margin-top: 200px; } .button { background-color: #ff
阿超
2022/08/21
8930
水波纹按钮动画
【css动画】移动的小车
[前端CSS高频面试题]如何画0.5px的边框线(详解) CSS3基础属性大全 CSS3动画属性 animation详解(看完就会) CSS3 transform 2D转换之移动 旋转 缩放(详细讲解看完就会) CSS3 Z—Index 详解 CSS3 positon定位详解(通俗易懂)
坚毅的小解同志的前端社区
2022/11/28
1.3K0
【css动画】移动的小车
【前端攻略--HTML/CSS】这是你需要的transform学习教程
transition语法格式:transition: property duration timing-function delay;
野原测试开发
2019/07/10
1K0
推荐阅读
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(七) -> JS动画(二)
630
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(七) -> JS动画(一)
610
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
840
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 构建用户界面(二)
680
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> stepper
750
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> swiper
850
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 构建用户界面(一)
830
【愚公系列】2022年01月 华为鸿蒙OS-04-容器组件(badge、dialog、div)(JS开发版)
9230
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> tabs
650
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)
580
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(六) -> CSS动画
940
Vue框架Element UI教程-出现和隐藏动画(三)
1.7K0
html结合css滑稽笑脸表情包实现思路
2810
基于vue封装的pc端swiper组件
9340
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(五) -> Svg
870
乐淘网侧边栏动画
7170
「HTML+CSS」--自定义加载动画【046】
3660
水波纹按钮动画
8930
【css动画】移动的小车
1.3K0
【前端攻略--HTML/CSS】这是你需要的transform学习教程
1K0
相关推荐
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(七) -> JS动画(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验