linker脚本文件知识

时间:2024-03-15 18:01:49

linker脚本文件的作用

linker脚本文件是用来控制link过程的文件,文件中包含内容为linker的处理命令,主要用于描述输入文件到输出文件(目标文件)时各个内容的的分布及内存映射等等。linker文件可以自己提供,也可以有ld过程自己生成,当使用缺省的linker脚本文件时,ld的命令选项将会对其产生一定的影响,GNU编译环境中可以通过-T命令指定相应的liner脚本,在使用-T时,指定的linker脚本文件会完全取代缺省linker文件。当作为缺省linker文件的补充时,不需要使用-T选项,而将linker脚本直接作为输入文件处理,此种情况下新的linker脚本文件不会替换缺省的脚本文件。下图为ARM版本的编译示例过程,可以看看ARM link在其过程中的作用

linker脚本文件知识

Linker脚本文件格式

linker脚本文件是使用文本格式进行编写的,由一连串的脚本命令构成。脚本由关键字、参数等组成,各个命令之间由分号分割。注释方式类同C语言,使用/*和*/的使用方式。文件名及格式等字符串可以直接使用,如果存在特殊字符可以加用双引号。linker脚本文件构成:linker脚本文件中包含一些变量符号,运算表达式,函数及相应命令组成。一个简单的示例如下:

linker脚本文件知识

其中.定义为location counter,SECTIONS即为命令关键字,此示例表示所有输入文件的.text段将放入输出.text段中,地址从0x10000开始,如果.没有定义初始值为0。其中的*号为通配符,linker脚本中的通配符存在如下:

linker脚本文件知识

脚本命令关键字

linker脚本文件知识

linker脚本文件知识

liner脚本中的函数

linker脚本文件知识

linker脚本文件知识

linker脚本中的运算符

linker脚本中可以存在相应的常量与变量,运算符和c中类似,运算表达式如下:

symbol = expression ;symbol += expression ;symbol -= expression ;symbol *= expression ;symbol /= expression ;symbol <<= expression ;symbol >>= expression ;symbol &= expression ;symbol |= expression ;

具体如下存在的运算方式:

linker脚本文件知识