一、编译过程简介
编译过程可以分为4部分内容组成
预处理器->编译器->汇编器->链接器
1.预处理器
(1)处理所有的注释,空格代替
(2)将所有的#define删除,展开所有的宏定义
(3)处理条件编译指令#if #ifdef #elif #else #endif
(4)处理#include 展开文件包含
(5)保留编译器需要使用#pragma指令
预处理指令示例
gcc -E file.c -o file.i
2.编译器
(1)对预处理文件进行语法分析,词法分析,语义分析
语法分析:分析表达式是否遵循语法规则
词法分析:分析关键字,标识符,立即数是否合法
语义分析:在语法分析基础上进一步分析表达式是否合法
(2)分析结束后进行代码优化生成相应的汇编代码文件
编译指令示例 gcc -S file.i -o file.s
3.汇编器
(1)汇编器将汇编代码转换为机器可以执行的指令,也就是机器指令
(2)每条汇编指令几乎都对应一条机器指令
汇编指令示例
gcc -C file.S -O file.o
二. 链接过程简介
链接是指将目标文件最终生成可执行文件
根据链接方式不同,链接过程可以分为
1.动态链接: 在程序启动后才动态加载目标文件
2.静态链接: 目标文件直接进入可执行文件
连接器:主要作用是把各个模块之间相互引用部分处理好,各个模块能够正确链接. 如果是静态链接,连接器会将库的内容直接加入到可执行程序中