深入理解计算机基础——Linking

链接过程

在这里插入图片描述
Step1:将全局变量、函数定义为symbol,生成relocatable object file(.o file)
Step2:将不同relocatable object file合并到同一个executable file(可直接拷贝进入内存执行,加载到0x40000000位置)中,并将symbol用内存中的实际地址替换。
在这里插入图片描述

ELF

在这里插入图片描述.test段:存放代码
.rodata段:只读数据
.data段:已初始化的全局变量、静态变量
.bss段:未初始化的全局变量、静态变量,不占用空间

symbol

Strong symbol:初始化的全局变量、函数
Weak symbol:未初始化的全局变量

Rule:

  1. 不允许多个强符号同时出现
  2. 出现强符号和弱符号时选择强符号
  3. 出现多个弱符号时随机选择

动态库与静态库

静态库在这里插入图片描述

相关函数被编译成独立的目标模块,单独封装成文件
编译时需要输入所有静态库

unix> ar rs libc.a atoi.o printf.o random.o

维护unresolve references列表,从左到右扫描时解决,如果扫描完毕,列表不为空会报错。

动态库
能够直接被加载如内存(.so文件,也叫DLL)
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值