IDE/build(构建)
现在的 IDE 将编译和链接的过程合并到了一起
预处理『.i』
头文件被预编译成 『.i』 文件,经过预编译后的 『.i』 文件不包含任何宏定义,包含的文件被插入到 『.i』 文件中,判断宏定义是否正确或头文件包含是否正确时,可以查看预编译后的文件来确定。
- 将
#define
删除,展开所有宏定义 - 处理所有条件预编译指令
- 处理
#include
预编译指令 - 删除所有注释
- 添加行号和文件名标识,便于编译时给出行号信息
- 保留所有的
#pragma
编译器指令
编译『.s』
把预处理完的文件生成汇编代码文件,GCC 把预处理和编译合并为一个步骤
编译器
将高级语言翻译成机器语言的工具
- 扫描
- 语法分析
- 语义分析
- 源代码优化
- 代码生成
- 目标代码优化
汇编『.o』
将汇编代码转换为机器指令,每个汇编语句几乎都对应一条机器指令
目标文件
源代码经过编译后形成的汇编文件 .o
链接『.out』
按照功能和性质将(软件)代码分为不同的功能模块,各个模块之间相互依赖又相对独立,链接就是将多个模块拼接成程序(软件)的过程。
链接器
将几个输入目标文件加工后合并成一个输入文件
- 地址和空间分配
- 符号决议(地址绑定、指令绑定)
- 重定位
静态链接
将编译后的目标文件『.o』 与库 『lib』一起链接形成可执行文件
库
一组目标文件的包,将一些常用的代码编译成为目标文件后打包存放