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)结合在一起,生成一个最终的可执行文件或库。具体功能包括:

  1. 符号解析:解析并匹配目标文件中的符号(如函数和变量),确保每个符号的引用都有对应的定义。

  2. 地址重定位:将相对地址转换为绝对地址,使得程序在运行时可以正确访问内存位置。

  3. 段合并:将多个目标文件中的相同类型的段(如代码段、数据段)合并到一起。

  4. 处理库文件:将所需的静态库或动态库文件包含到最终的可执行文件中。

示例

假设你有两个目标文件 main.outils.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)。

使用 gccg++ 进行链接

尽管可以直接使用 ld 进行链接,但更常见的做法是通过编译器(如 gccg++)来进行编译和链接,因为它们会自动处理很多细节。例如:

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 名称的由来的更多相关文章

  1. gcc ld 链接器相关知识,调试指令(程序员的自我修养----链接、装载与库)

    最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接 ...

  2. lscript.ld 链接器脚本

    sumary选项卡 lscript.ld是这个应用程序的链接器脚本. 这是实用的作为一个报告 看看内存是针相应用程序. 它也能够被编辑以改变应用程序的位置.双击Hello_Zynqàsrcà lscr ...

  3. ld.so和ld-linux.so* :动态链接器/加载器(转)

    概述 动态链接器可以被正在运行的动态链接程序或者动态对象(没有对动态链接器指定命令选项,动态链接器被存储在程序的.interp区域)间接调用,也可以直接运行程序, 例如:/lib/ld-linux.s ...

  4. C编译器、链接器、加载器详解

    摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代 ...

  5. LLD-LLVM链接器

    LLD-LLVM链接器 LLD是LLVM项目中的链接器,是系统链接器的直接替代,并且运行速度比它们快得多.它还提供了对工具链开发人员有用的功能. 链接器按完整性降序支持ELF(Unix),PE / C ...

  6. C++链接器工具错误:LNK2001, LNK2019(转载)

    这是归属于链接器工具错误 这一类. 无法解析的外部符号“symbol” 代码引用了链接器无法在库和对象文件中找到的内容(如函数.变量或标签). 可能的原因 代码请求的内容不存在(例如,符号拼写错误或使 ...

  7. 深入探究VC —— 链接器link.exe(4)

    在程序编译完成后,生成的文件是以.obj为扩展名的对象文件,link.exe是将这些对象文件与库链接起来以创建可执行文件或动态链接库文件的工具. link.exe的输入文件包括obj文件.lib文件. ...

  8. 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...

  9. 【亲测有效】无法定位链接器!请检查 tools\link.ini 中的配置是否正确的解决方案

    在进行易语言静态编译的时候,出现了如下错误: 正在进行名称连接...正在统计需要编译的子程序正在编译...正在生成主程序入口代码程序代码编译成功等待用户输入欲编译到的文件名正在进行名称连接...开始静 ...

  10. C++之编译器与链接器工作原理

    原文来自:http://blog.sina.com.cn/s/blog_5f8817250100i3oz.html 这里并没不是讨论大学课程中所学的<编译原理>,只是写一些我自己对C++编 ...

随机推荐

  1. 【进阶篇】Java 项目中对使用递归的理解分享

    [进阶篇]Java 项目中对使用递归的理解分享 目录 [进阶篇]Java 项目中对使用递归的理解分享 前言 一.什么是递归 1.1基本概念 1.2优缺点 1.3与迭代的区别 二.实际案例 三.改进方案 ...

  2. 超快的 Python 包管理工具「GitHub 热点速览」

    天下武功,无坚不破,唯快不破! 要想赢得程序员的欢心,工具的速度至关重要.仅需这一优势,即可使其在众多竞争对手中脱颖而出,迅速赢得开发者的偏爱.以这款号称下一代极速 Python 包管理工具--uv ...

  3. Linux运行等级

    Linux运行级别 Linux system存在7个运行级别 运行级别0:所有进程终止,机器将有序停止,关机时就处于这个运行级别 运行级别1:单用户模式(root用户进行维护),系统中所有的服务也不会 ...

  4. vs code 设置中文

    1.安装 下载地址:官网   打开 安装后打开默认显示英文界面. 2.修改 使用快捷键 ctrl+shift+p, 输入configure display language 下拉框选择 install ...

  5. 算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环

    大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 不要轻易使用 For 循环 For 循环,老铁们在编程中经常用到的一个基本结构,特别是 ...

  6. C#计算两个日期的天数

    private int DateDiff(DateTime dateStart, DateTime dateEnd) { DateTime start = Convert.ToDateTime(dat ...

  7. PositiveSmallIntegerField、SmallIntegerField和IntegerField

    当您在Django中定义模型时,有几种不同的整数字段类型可供选择,包括PositiveSmallIntegerField.SmallIntegerField和IntegerField.以下是这三种整数 ...

  8. Day 3 - 单调栈、单调队列、凸包与斜率优化

    单调栈 引入 何为单调栈?顾名思义,单调栈即满足单调性的栈结构.与单调队列相比,其只在一端进行进出. 为了描述方便,以下举例及伪代码以维护一个整数的单调递增栈为例. 过程 插入 将一个元素插入单调栈时 ...

  9. 从菜鸟到大牛!嵌入式完整学习路线:STM32单片机-RTOS-Linux(文末领取开发板全套资料)

    ​ 嵌入式系统是许多现代电子设备和智能系统的核心,掌握嵌入式系统,意味着能够设计和开发更加智能化的产品.本文为所有想进入嵌入式领域的初学者提供一个完整系统学习的路线图,按照 "STM32单片 ...

  10. php 后台执行进程

    一些业务需要长期在后台执行进程 下面用thinkphp5.1做演示 在command文件夹下建立进程 cd 到 lunar_php项目根目录 执行 php think hello 如果想后台执行 no ...