链接器 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++编 ...
随机推荐
- 记一次 .NET某网络边缘计算系统 卡死分析
一:背景 1. 讲故事 早就听说过有什么 网络边缘计算,这次还真给遇到了,有点意思,问了下 chatgpt 这是干嘛的 ? 网络边缘计算是一种计算模型,它将计算能力和数据存储位置从传统的集中式数据中心 ...
- lumen、laravel 环境问题汇总
框架报500 1.chmod 777 -R storage 将日志目录权限设置下. 2.修改fastcgi,将代码目录包含进去. fastcgi_param PHP_ADMIN_VALUE " ...
- 详细讲解 Keil Pack Installer,以及通过 Keil 官网获取 Pack
前言 大家好,我是梁国庆. 收到粉丝留言,说 Keil 安装 Pack 不太明白,可不可以详细演示一下? 当然可以有,直接视频+文章全部安排,我就是宠粉. PS:第一次录视频有些紧张,见谅哈. 微信视 ...
- 含税168元起!四核A53+NPU+PCIe+USB3.0,瑞芯微RK3562性价比真高!
- 谈谈你对 Vue 生命周期的理解?
生命周期是什么? Vue 实例有一个完整的生命周期,也就是从 开始创建.初始化数据.编译模版.挂载 Dom -> 渲染.更新 -> 渲染.卸载等一系列过程,我们称这是 Vue 的生命周期. ...
- Mac mysql5.7.x my.cnf默认配置
配置如下 [client] port = 3306 default-character-set=utf8 [mysqld] character_set_server=utf8 datadir=/usr ...
- Day 10 - 动态规划与树状数组
动态规划基础 主要介绍动态规划的基本思想,以及动态规划中状态及状态转移方程的设计思路,帮助各位初学者对动态规划有一个初步的了解. 引入 [IOI1994] 数字三角形. 给定一个 \(r\) 行的数字 ...
- pytest + allure2.x 踩坑-报告无数据
我按照网上的教程,在用pytest生成完allure可以使用的json数据之后,然后再用allure生成报告,打开,发现我生成的报告中没有数据显示. 1.首先我用pytest生成数据是没有问题的 2. ...
- C# 12 新增功能实操!
前言 今天咱们一起来探索并实践 C# 12 引入的全新功能! C#/.NET该如何自学入门? 注意:使用这些功能需要使用最新的 Visual Studio 2022 版本或安装 .NET 8 SDK ...
- 智能家居如何把老款定频空调变成智能“变频”空调#米家#智能家居#HA
背景 最近长沙的天气暴热,室内达到了34-35度,天气预报最高温度上了40度,这么酷热的天气,离开了空调,基本上就是一身汗,全身湿透,特别难受,然后不得不开启家里的一台将近10年的老式定频空调,输入功 ...