018链接器脚本

1、链接器脚本的神奇作用

  通过使用不同的链接器脚本,不需要更改源代码,就可以实现不同的功能!

  链接器脚本对程序的生成有着至关重要的作用!

2、链接器脚本--->段

  一个可执行程序通常是由:代码段,数据段,bss段构成的。

  同样,在用于链接这个程序的链接器脚本中,就会反映出这几个段的信息。

  段的信息是由SECTIONS固定的标号指明链接器脚本最重要的信息是段;

  代码段里面包含的是所有文件的代码;

  数据段包含的是所有文件的数据;

  最基本的框架如下:

  

3、链接器脚本--->设置起始链接地址

  . = 0x0;

  .(点)表示当前位置,在整个程序中最前面,在代码段之前的位置,当然是程序的起始地址,程序的刚开始地址;

    那么程序是从哪一个地址开始链接呢?后面跟的信息就是程序的链接地址;  

  

  

4、链接器脚本--->对齐设置

  为什么要做4字节对齐?ARM处理器在访问时实际上是采用4字节对齐的方式去访问的,所以说希望在存储一些数据时,尽量的做到4字节对齐,这样能够提高访问的效率;在存放大数据时,希望能够做到4字节对齐,也就是从4的整数倍的这样一个地址开始存放。

  如果起始地址就不能做到4字节对齐,可以使用 . = ALIGN(4); 对地址进行调整;

  

  

5、链接器脚本--->使用变量

  用bss_start记录当前地址,bss_end记录当前地址,但是这两个地址不一样,因为中间隔了一个bss段;

  如果在程序中想计算bss段的长度,就可以用bss_end - bss_start来计算这个长度;

  

  

6、链接器脚本--->设置代码段首文件

  用到不同的链接器脚本,可以让程序运行出完全不同的效果;

  上面那些内容不足以对程序产生那么大影响,虽然有一些修改,但是程序不会体现出完全不同的两种效果,这个神奇之处在代码段的头文件这个位置;

  程序包含多个文件,哪一个文件排在代码段的最前面呢?是有讲究的,二三四的顺序可以不管,但是第一的顺序必须管,第一个文件需要做什么CPU初始化,是首先必须要执行的代码,CPU上电之后,首先必须要执行这个代码,必须要保证,程序在链接时链接到最前面,排第一,怎么做呢?要在代码段中做一个设置。

  

  

  

  

原文地址:https://www.cnblogs.com/mch0dm1n/p/5512901.html