7-链接文件作用时间及原理

  1. 一个

开发C语言程序需要经过四个步骤:预编译、编译、链接、运行

预编译

预编译对源码中所有的预处理语句进行处理,例如: #include语句所包含的文件内容替换掉语句本身,所有已定义的宏被展开。根据#ifdef,#if等语句的条件是否成立取舍相应的部分,预处理之后源码中不再包含预处理语句。GCC预处理可以生成.i的文件。

编译

这一阶段,编译器对源码进行词法分析、语法分析、优化等操作,最后生成汇编代码。

汇编

这一阶段使用汇编器对汇编代码进行处理,生成机器语言代码,保存在后缀为.o的目标文件中。当程序有多个代码文件构成时,每个文件都要先完成汇编工作,生成.o目标文件后,才能进入下一步的链接工作。

链接

经过汇编以后的机器代码还不能直接运行。为了使操作系统能够正确加载可执行文件,文件中必须包含固定格式的信息头,还必须与系统提供的启动代码链接起来才能正常运行,这些都是又链接器来完成的。

在STM32L431RC芯片中,链接的工作由链接文件.ld来完成,链接文件的主要功能就是将多个目标文件(.o)和库文件(.a)链接成一个可执行的文件。

链接文件中主要有以下三个部分:链接配置、内存布局定义、段链接定义

链接配置中设定一些符号变量的定义、入口地址、输出格式等