一.
生成一个程序的过程可以分为四个步骤:预编译——>编译----->汇编----->链接
1. 预编译:gcc -E main.c -o main.i
1>#define文本替换
2>递归处理#include预编译指令
3>处理所有条件预编译指令(#if #ifdef #elif #else #endif)
4>删除注释
5>添加行号和文件标识
2. 编译:gcc -S main.i -o main.s
编译的过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件(整个程序构建的核心部分)。gcc这个命令只是这些后台程序的包装,它会根据不同的参数要求去调用预编译编译程序cc1、汇编器as、链接器ld。
预编译和编译程序:
C语言:cc1
C++:cc1plus
3. 汇编:gcc -c main.s -o main.o
汇编器(as)是将汇编代码转变为机器可以执行的指令,每一个汇编语句几乎都对应一条机器指令。或者使用gcc命令从C源代码文件开始,经过预编译、编译和汇编直接输出目标文件:gcc -c main.c -o main.o
4. 链接:gcc -o main main.o
1>地址和空间分配
2>符号决议
3>符号重定位