编译过程
- 预编译:
gcc -E hello.c -o hello.i
- 把
#include
包含的文件替换到c文件中,即头文件展开。并不检查语法是否正确。 - 进行宏定义替换:预编译后,将宏名替换为宏值
- 在.c源文件中的注释,在预编译后,会在.i文件中变成空行
- 预编译后仍是源文件,也可叫预处理文件
- 把
- 编译:
gcc -S hello.i -o hello.s
- 将C程序翻译成汇编指令后,生成汇编文件
- 编译器的核心任务是把C程序翻译成机器的汇编语言
- 编译过程文件中,主要是逐行做语法检测和句法分析,此过程最耗时
- 符合规则后,将其翻译成等价的中间代码或汇编代码
- 汇编:
gcc -c hello.s -o hello.o
- 将汇编指令翻译成对应的二进制编码,编码是人们看不懂的
- 将编译阶段生成的.s文件转成二进制目标代码,即二进制文件
- 链接:
gcc hello.o -o hello.exe
- 把目标文件、启动代码、库文件,链接成可执行目标文件的过程
- 数据合并
- 数据段地址回填
- 库引入
- 此文件可被加载或拷贝到存储器中
- 把目标文件、启动代码、库文件,链接成可执行目标文件的过程
gcc 选项
- gcc编译常用选项
- gcc编译优化选项
- gcc警告与错误提示选项