链接器 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++编 ...
随机推荐
- 《DNK210使用指南 -CanMV版 V1.0》第五章 编译CanMV固件
第五章 编译CanMV固件 1)实验平台:正点原子DNK210开发板 2) 章节摘自[正点原子]DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall ...
- mapreduce压缩
这是mr的一种优化策略,通过压缩编码对mapper或者reducer的输出进行压缩,以减少磁盘io,提高mr运行速度(但也相应增加了cpu运算负担) 特性: 1.mr支持将map输出的结果或者redu ...
- 一款EF Core下高性能、轻量级针对分表分库读写分离的解决方案
前言 今天大姚给大家分享一款EF Core下高性能.轻量级针对分表分库读写分离的解决方案,开源(Apache License)的EF Core拓展程序包:ShardingCore. ShardingC ...
- Java全局唯一ID生成策略
在分布式系统中常会需要生成系统唯一ID,生成ID有很多方法,根据不同的生成策略,以满足不同的场景.需求以及性能要求. 1.数据库自增序列 这是最常见的一种方式,利用DB来生成全库唯一ID. 优点: 此 ...
- C# 线程与进程
一.前台线程与后台线程对象 为什么要用多线程? 1.让计算机"同时"做多件事情,节约时间. 2.多线程可以让一个程序"同时"处理多个事情. 3.后台运行程序,提 ...
- 解决方案 | 将时间转换为毫秒bat
@echo off setlocal enabledelayedexpansion rem 输入的时间 set "time_input=00:07:07.1" rem 解析时间 f ...
- Mysql实现主从复制(一主双从)
一.环境介绍 LNMP(centos7,mysql5.6) vmware workstation pro配置了3个虚拟机,均安装了LNMP环境: master: 192.168.0.105 slav ...
- docker redis集群实验
集群redis 分片+高可用+负载均衡 master + slave{1..5} 一个挂了另一个顶上 通过脚本创建6个redis配置文件 [root@docker ~]# for port in $( ...
- 15、Spring之基于xml的声明式事务
阅读本文前,建议先阅读Spring之基于注解的声明式事务 15.1.环境搭建 创建名为spring_transaction_xml的新module,过程参考13.1节 15.1.1.配置打包方式和依赖 ...
- 【ELK】Kibana-7.13.1版本 启动报错 Centos6
报错信息: [root@centos6-1 gcc-4.8.2]# /opt/kibana-7.13.1-linux-x86_64/bin/kibana /opt/kibana-7.13.1-linu ...