编译链接

一.

生成一个程序的过程可以分为四个步骤:预编译——>编译----->汇编----->链接

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>符号重定位

 

 

猜你喜欢

转载自blog.csdn.net/qq_41896788/article/details/88904021