链接脚本
1 程序的编译、链接
1.1 编译过程
- 编译器以源文件为单位进行编译
- 一个C文件对应一个目标.o文件
- 一个汇编.S文件对应一个.o文件
1.2 链接过程
- 链接将各个.o文件组装可执行文件
- 相同的段组装一块
- 加上必要的文件头
2. 链接脚本
2.1 链接脚本的作用
- 链接脚本规定了各个段的组装顺序、起始地址、位置对齐等
- 规定了输出可执行文件的格式、平台等信息
- 链接器根据链接脚本进行组装
2.2 链接脚本示例
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段描述
}
不同系统下,链接脚本的文件后缀一般不一样
GNU Linux环境下,链接脚本一般是xxx.lds,如u-boot下的链接
脚本u-boot.lds