3.7 链接过程(1) 地址空间分配与链接脚本

链接过程(1) 地址空间分配与链接脚本

将所有的可重定位目标文件合并、组装成可执行目标文件

链接过程:

  1. 地址空间分配
  2. 符号解析:强符号与弱符号
  3. 重定位

1. 地址空间分配

  1. 扫描所有目标文件,从各个文件段表中获取各个文件代码段、
    数据段信息:大小、地址等
  2. 从指定的链接地址开始,按照代码段、数据段、bss段顺序将
    各个目标文件的同类型段合并,重新计算各个段的长度和位置

2. 链接脚本

链接脚本规定了各个段的组装顺序、起始地址、位置对齐等
规定输出可执行文件的格式、运行平台、入口地址等信息

链接器根据链接脚本进行组装

2.1 链接脚本示例

OUTPUT_FORMAT(“elf32-littlearm”, 
“elf32-bigarm”,“elf32-littlearm”)  //输出ELF文件格式

OUTPUT_ARCH(“arm”)  //输出可执行文件的运行平台为arm
ENTRY(_start)  //程序入口地址
SECTIONS  //各段描述
{
	. = 0x60000000;  //代码段起始地址
	.text: { *(.text)} //代码段描述:所有.o文件的.text
	. = 0x60200000;  //数据段的起始地址
	.data: { *(.data)}  //数据段描述
	.bss : { *(.bss)} //BSS段描述
}

2.2 不同开发环境下的链接脚本

2.2.1 IDE

链接器调用缺省的链接脚本来完成组装

应用开发人员,只关注业务逻辑实现,不用关心底层链接,程
序运行时由加载器加载运行

2.2.2 裸机、系统、汇编开发

根据开发板不同硬件配置,链接到指定位置,需要显式指定链接脚本,甚
至自己写链接脚本

3 链接地址

3.1 Linux环境下 gcc编译器:

0x08048000

3.2 Linux环境下 arm-linux-gcc:

0x00010000

3.3 交叉编译器 arm-linux-gcc

3.3.4 U-boot编译链接脚本:

./u-boot.lds

3.3.5 Linux 编译链接脚本:

arch/arm/boot/compressed/vmlinux.lds

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值