ARM编程工具篇——链接器脚本

一、概述

每一个链接过程都由链接脚本(linker script,一般以lds作为文件的后缀名)控制。链接器脚本主要用于规定如何把输入文件内的section放入输出文件内,并控制输出文件内各部分在程序地址空间内的布局。

二、脚本构成

ARM编程工具篇——链接器脚本_第1张图片


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)”表示代码段的首文件

你可能感兴趣的:(橙子软件)