第四章 静态链接

4.1 空间和地址分配在这里插入图片描述

4.1.1按序叠加
去掉头尾,每个目标文件依次合并。
问题:有多个零散的段,浪费空间;地址和空间对齐要求,造成大量内存碎片。

4.1.2相似段合并 (目前都用这种)
1.空间与地址分配:将所有目标文件的符号放进一个全局符号表,计算输出文件各个段合并后的长度和位置,建立映射关系
2.符号解析和重定位

4.1.3符号地址确定
得到初始虚拟量地址,在得到偏移量,可以计算各个符号(函数和变量)的地址。

4.2 符号解析和重定位

4.2.1重定位
编译器先根据两个极端地址和相对的偏移量记下每个符号(变量和函数)的地址,等链接器完成地址和空间分配后,在由链接器计算确定所有符号地址。

4.2.2重定位表
记录每个符号的重定位段

4.2.3符号解析

4.3.4指令修正方案

4.3 COMMON 块

在这里插入图片描述

4.4 C++相关问题

4.4.1重复代码消除

4.4.2全局构造与析构

4.4.3C++与ABI
ABI类似API是应用程序接口 ABI是二进制层面

4.5 静态库编译

在这里插入图片描述
因为printf.o里面还有其他符号,所以链接报错

4.6 链接过程控制

4.6.1链接控制脚本
vscode就是脚本控制
还有linux的Makefile文件

4.6.2最小的程序

4.6.3使用ld链接脚本
在这里插入图片描述
链接脚本示例(ld脚本采用汇编写的,有些则是用高级语言)

4.6.4ld脚本语法

BFD库

目的用统一的接口处理不同的目标文件格式。

小结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值