ARM编程工具篇——链接器脚本
来源:互联网 发布:php urlencode gbk 编辑:程序博客网 时间:2024/06/06 00:14
一、概述
每一个链接过程都由链接脚本(linker script,一般以lds作为文件的后缀名)控制。链接器脚本主要用于规定如何把输入文件内的section放入输出文件内,并控制输出文件内各部分在程序地址空间内的布局。
二、脚本构成
2.1基本构成:段
一个可执行程序通常是由:代码段(text),数据段(data),bss段构成的。同样,在用于链接这个程序的链接器脚本中,就会反应出这几个段的信息。
代码段:存放程序中的代码。
数据段:存放全局变量。
bss段:存放未初始化的全局变量。
2.2设置起始链接地址
代码存放的位置,那这个地址有什么影响呢?(这个先保留等以后在补上)
2.3对齐设置
arm处理在访问时采用4字节对齐的方式,所以我们在存放数据的时候也应该采用4字节对齐,这样可以大大提高访问效率。
2.4使用变量
添加变量为了方便使用。
2.5设置代码段的首文件
通常一个程序有好几个代码文件组成,哪个文件应该是第一个要链接的文件呢?这时候就需要我们设置代码段的首文件啦。
下面就看一个简单的链接器脚本代码
SECTIONS{ .=0x00; . = ALIGN(4); .text : { start.o(.text) *(.text) } . = ALIGN(4); .data : { *(.data) } . = ALIGN(4); bss_start = .; .bss : { *(.bss) } bss_end = .;}
对上面的代码一一解释
“. = 0x00”表示设置链接起始地址,那这个地址有什么影响呢?(这个先保留等以后在补上)
“. = ALIGN(4)”表示采用4字节的对齐方式
“.text : {*(.text)}”表示将所有输入文件的.text section合并成一个.text setction。
“*”表示所有输入文件。
“.”表示当前地址。
“bss_start = .; bss_end = .;”表示把当前地址赋值给变量bss_start和bss_end,如果我们想要知道bss段的大小,我们只需用bss_end-bss_start就可以知道啦。
“start.o(.text)”表示代码段的首文件
- ARM编程工具篇——链接器脚本
- ARM编程工具篇——Makefile
- ARM编程工具篇——交叉编译
- ARM链接脚本
- ARM链接脚本
- ARM链接脚本分析
- ARM链接脚本
- GNU ARM 链接脚本 ld
- ARM编程工具
- arm-linux-ld命令 ld链接脚本
- arm-linux-ld命令 ld链接脚本
- arm-linux-ld命令 ld链接脚本
- 应用程序——链接脚本
- ARM链接器(转)
- arm 交叉编译工具链 生成脚本
- arm-linux-ld命令 ld链接脚本(不错,推荐可以学习一些lds链接脚本文件)
- 链接器脚本
- 链接器脚本
- 我知道没人会看的。。。。。
- 第二天 循环语句
- [TOJ 1636] Going Home
- matlab中reshape和repmat函数的用法
- Block介绍(二)内存管理与其他特征
- ARM编程工具篇——链接器脚本
- SYbase解决Can't allocate space for object 'syslogs'错误
- mel的helloworld程序
- 053第455题
- 移位操作之旋转移位
- iOS开发-键盘消失的几种方式
- java 记录项目中把秒换算为天、时、分、秒的方式
- 手动脱RLPack壳实战
- Android入门(52)——第七章 Android中常用的系统服务