链接器的“两步链接”

"两部链接"(Two-pass linking),是指链接的过程分为两步:地址分配 -> 重定向。

地址分配:扫描输入的目标文件,分配各目标文件内各段的地址,并收集全局符号定义和引用,放入一个全局符号表。完成这一步后,所有的符号地址都被确定了。

重定向:重定向各输入文件中引用的全局符号到其实际的地址。

参考:《程序员的自我修养》,第 4 章 1 ~ 2 节。

时间: 2024-10-15 14:59:50

链接器的“两步链接”的相关文章

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

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11) 开发环境 : -- 操作系统 : Vmware11 + RedHat6.3 企业版 + Win8.1; -- 硬件 : OK-6410-A 开发

链接器相关问题

从.c文件到 可执行 文件需要经历的过程 static linking 静态链接器的输入是一组可重定向文件,输出一个全链接的可执行目标文件. 目标文件有三种形式: 1. 可重定向目标文件:包含二进制代码和数据,可以在编译时和其他可重定向目标文件一起,得到可执行文件. 2. 可执行目标文件:包含二进制代码和数据,可以直接拷贝进内存进行执行. 3. 共享目标文件:一种特殊的重定向文件,可以被加载进内存,并在加载和运行期间进行动态链接. 编译器和汇编器产生可重定向目标文件(包括共享目标文件) 链接器产

018链接器脚本

1.链接器脚本的神奇作用 通过使用不同的链接器脚本,不需要更改源代码,就可以实现不同的功能! 链接器脚本对程序的生成有着至关重要的作用! 2.链接器脚本--->段 一个可执行程序通常是由:代码段,数据段,bss段构成的. 同样,在用于链接这个程序的链接器脚本中,就会反映出这几个段的信息. 段的信息是由SECTIONS固定的标号指明链接器脚本最重要的信息是段: 代码段里面包含的是所有文件的代码: 数据段包含的是所有文件的数据: 最基本的框架如下: 3.链接器脚本--->设置起始链接地址 . =

链接器简介

1.可执行程序产生流程 2.链接器 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程.这个文件可以被加载到存储器并执行. 链接可执行与编译时,也可执行与加载时,甚至执行与运行时. 链接器的主要工作就是: (1)符号解析.目标文件定义和引用的符号,将每个符号引用刚好和一个符号定义联系起来. (2)重定位.编译器和汇编器生成从地址0开始的代码和数据节.链接器将每个符号定义与一个存储器位置联系起来, 然后修改所有对这些符号的引用,使得它们指向这个存储器位置,从而重定位这些节. 链接器可分

自己动手写编译器、链接器目录结构

自序 8第1章 引言 101.1 Hello World编译过程分析 101.1.1 Hello World程序源文件 101.1.2 词法分析 111.1.3 语法分析 121.1.4 语义分析 131.1.5 链接器 141.2 SCC编译器简介 161.2.1 SCC编译器架构 161.2.2 SCC编译器开发环境 171.2.3 SCC编译器运行环境 18第2章 文法知识 202.1 语言概述 202.2 形式语言 212.2.1 字母表和符号串 212.2.2 文法与语言的形式定义 2

[国嵌笔记][018][链接器脚本]

链接器脚本 一个可执行程序通常由:代码段.数据段.bss段构成.在用于链接这个程序的链接器脚本中,反应的是这几个段的信息. 创建链接器脚本 1.创建链接器脚本 vim led.lds 2.设置起始链接地址 . = 0x30008000 3.对其设置 . = ALIGN(4); arm处理器在访问数据的时候是以4字节对齐的方式访问的,所以在存储数据时以4字节对齐可以提高访问效率 4.使用变量 start_adr = .; 使用变量保存下来的地址可以在程序中使用 5.设置代码段的首文件 led.o(

两步验证杀手锏:Java 接入 Google 身份验证器实战

两步验证 大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的. Google 的身份验证器一般也是用于登录进行两步验证,和苹果的两步验证是同样的道理.只不过 Google 的身份验证器用得更多更广泛,如 GitHub 的两步验证都是基于 Google 身份验证器. Google Authenticator 简介 Google Authenticator 身份验证器是一款基于时间与哈希的一次性密码算法的

链接器

作者:左少华 时间:2015-05-24 转载请注明出处: http://blog.csdn.net/shaohuazuo/article/details/45957971 连接器的功能 链接器是将各种代码和数据部分收集起来并合成一个单一文件的过程, 这个文件可以被加载到存储器中执行. 链接器的执行时机 可以执行于编译时,也就是在源代码被翻译成机器代码的时候. 可以执行于加载时,也就是程序被加载器加载到存储器,并执行时. 可以执行于运行时,由应用程序来执行. 链接是通过链接器程序自动执行的. 为

你好,C++(4)2.1.3 我的父亲母亲:编译器和链接器 2.1.4 C++程序执行背后的故事

2.1.3  我的父亲母亲:编译器和链接器 从表面上看,我是由Visual Studio创建的,而实际上,真正负责编译源代码创建生成可执行程序HelloWorld.exe的却是Visual Studio中集成的C++编译器cl.exe和链接器link.exe.他们二老,才是我的亲生爹妈. 为了便于人们的编写.阅读和维护,我们的源文件是使用C++这种人们可以理解的高级程序设计语言编写的.然而,计算机却并不理解这种高级语言,也就无法直接执行高级语言编写而成的源文件.所以,这里就需要一个翻译的工作,将