链接器 ld 名称的由来
Linker 通常缩写为 LD,这是因为在 Unix 和类 Unix 系统中,ld
是链接器的常用命令名称。这个命名可以追溯到 Unix 系统的早期发展历史。
历史背景
Unix 早期:在 Unix 系统的早期版本中,命令行工具的名字通常都很短,以便在命令行界面中快速输入。这种命名习惯导致了很多工具的名称只有两个字母,比如
cc
(C 编译器)、cp
(复制文件)、mv
(移动文件)等。链接器:在这种命名惯例下,链接器被命名为
ld
,这是 "link editor" 的缩写。ld
意味着它是负责链接和编辑目标文件的工具,最终生成可执行文件或库文件。
GNU 链接器
在 GNU 工具链中,ld
是 GNU 链接器的命令。GNU 链接器是 GNU 项目的一部分,提供了一个强大且灵活的链接器实现,广泛用于各种 Unix 和类 Unix 系统,包括 Linux。
链接器的作用
链接器(Linker)的主要作用是将编译器生成的多个目标文件(object files)和库文件(libraries)结合在一起,生成一个最终的可执行文件或库。具体功能包括:
符号解析:解析并匹配目标文件中的符号(如函数和变量),确保每个符号的引用都有对应的定义。
地址重定位:将相对地址转换为绝对地址,使得程序在运行时可以正确访问内存位置。
段合并:将多个目标文件中的相同类型的段(如代码段、数据段)合并到一起。
处理库文件:将所需的静态库或动态库文件包含到最终的可执行文件中。
示例
假设你有两个目标文件 main.o
和 utils.o
,以及一个静态库 libmylib.a
,你可以使用 ld
命令进行链接:
ld -o myprogram main.o utils.o -L/path/to/lib -lmylib
其中:
-o myprogram
:指定输出文件名为myprogram
。-L/path/to/lib
:指定库文件的搜索路径。-lmylib
:指定要链接的库(libmylib.a
)。
使用 gcc
或 g++
进行链接
尽管可以直接使用 ld
进行链接,但更常见的做法是通过编译器(如 gcc
或 g++
)来进行编译和链接,因为它们会自动处理很多细节。例如:
gcc -o myprogram main.o utils.o -L/path/to/lib -lmylib
或者:
g++ -o myprogram main.o utils.o -L/path/to/lib -lmylib
总结
LD
是链接器的缩写,这是因为在 Unix 系统中,链接器的命令名被简短地命名为 ld
,代表 "link editor"。这种命名习惯源自 Unix 系统的早期历史,并延续至今。链接器在编译过程中起着至关重要的作用,它将多个目标文件和库文件连接在一起,生成最终的可执行文件或库文件。
链接器 ld 名称的由来的更多相关文章
- gcc ld 链接器相关知识,调试指令(程序员的自我修养----链接、装载与库)
最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接 ...
- lscript.ld 链接器脚本
sumary选项卡 lscript.ld是这个应用程序的链接器脚本. 这是实用的作为一个报告 看看内存是针相应用程序. 它也能够被编辑以改变应用程序的位置.双击Hello_Zynqàsrcà lscr ...
- ld.so和ld-linux.so* :动态链接器/加载器(转)
概述 动态链接器可以被正在运行的动态链接程序或者动态对象(没有对动态链接器指定命令选项,动态链接器被存储在程序的.interp区域)间接调用,也可以直接运行程序, 例如:/lib/ld-linux.s ...
- C编译器、链接器、加载器详解
摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代 ...
- LLD-LLVM链接器
LLD-LLVM链接器 LLD是LLVM项目中的链接器,是系统链接器的直接替代,并且运行速度比它们快得多.它还提供了对工具链开发人员有用的功能. 链接器按完整性降序支持ELF(Unix),PE / C ...
- C++链接器工具错误:LNK2001, LNK2019(转载)
这是归属于链接器工具错误 这一类. 无法解析的外部符号“symbol” 代码引用了链接器无法在库和对象文件中找到的内容(如函数.变量或标签). 可能的原因 代码请求的内容不存在(例如,符号拼写错误或使 ...
- 深入探究VC —— 链接器link.exe(4)
在程序编译完成后,生成的文件是以.obj为扩展名的对象文件,link.exe是将这些对象文件与库链接起来以创建可执行文件或动态链接库文件的工具. link.exe的输入文件包括obj文件.lib文件. ...
- 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...
- 【亲测有效】无法定位链接器!请检查 tools\link.ini 中的配置是否正确的解决方案
在进行易语言静态编译的时候,出现了如下错误: 正在进行名称连接...正在统计需要编译的子程序正在编译...正在生成主程序入口代码程序代码编译成功等待用户输入欲编译到的文件名正在进行名称连接...开始静 ...
- C++之编译器与链接器工作原理
原文来自:http://blog.sina.com.cn/s/blog_5f8817250100i3oz.html 这里并没不是讨论大学课程中所学的<编译原理>,只是写一些我自己对C++编 ...
随机推荐
- Centos 下Rabbit MQ 常用操作指令 汇总
1.rabbitmq 服务的启动停止. service rabbitmq-server start service rabbitmq-server stop 重启命令需要依次执行 stop 再 sta ...
- Java 代码实现POST/GET请求
方式一 package com.cyb.util; import java.io.BufferedReader; import java.io.DataOutputStream; import jav ...
- .NET周刊【7月第2期 2024-07-14】
国内文章 开源GTKSystem.Windows.Forms框架让C# winform支持跨平台运行 https://www.cnblogs.com/easywebfactory/p/18289178 ...
- [oeasy]python0024_ 输出时间_time_模块_module_函数_function
输出时间 回忆上次内容 print函数 有个默认的 end参数 end参数 的值可以是任意字符串 end参数 的值会输出到结尾位置 end参数 的默认值是 ...
- [oeasy]python0022_ python虚拟机_反编译_cpu架构_二进制字节码_汇编语言
程序本质 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 我们通过which命令找到这个python3.8的位置 将这个python3.8复制到我们的用户目录下 这个文件 ...
- .NET科普:.NET简史、.NET Standard以及C#和.NET Framework之间的关系
最近在不少自媒体上看到有关.NET与C#的资讯与评价,感觉大家对.NET与C#还是不太了解,尤其是对2016年6月发布的跨平台.NET Core 1.0,更是知之甚少.在考虑一番之后,还是决定写点东西 ...
- 记一次在openEuler系统下离线编译升级到openssh9.8p1
缘起 由于某个项目上甲方对服务器进行漏洞扫描,系统为:openEuler 22.03 (LTS-SP4).提示现有OpenSSH版本存在漏洞,需要升级到openssh-9.8p1的版本(目前最新),遂 ...
- php环境,性能优化
根据宝塔的推荐进行参数修改 我的是8G内存,修改成4G内存 下面是备份:修改前的 ; Start a new pool named 'www'.; the variable $pool can be ...
- springboot集成minIO
文件系统:负责管理和存储文件的系统软件.操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件 minIO:轻量级服务分布式文件系统,适合存储非机构化数据.采用去中心化共享架构,结 ...
- vue-puzzle-vcode与vue-drag-verify纯前端的拼图人机验证、右滑拼图验证
转载作品!以获取原作者允许,原文地址,感觉写的比较全面,也比较实用,大家可以去看看原文章: 纯前端的拼图人机验证.右滑拼图验证 1.vue-puzzle-vcode github地址:https:// ...