main.c–>main需要四步:预处理,编译,汇编,连接
1.预编译阶段:gcc -E main.c -o main.i
预编译阶段主要做六件事:
(1)删除#define,并做文本替换;
(2)递归展开头文件;
(3)处理以#开头的预编译指令;
(4)删除注释部分;
(5)添加行号和文件标识;
(6)保留#pragma指令,供给编译器,
预编译阶段的语言还属于高级语言,计算机不能理解.
2.编译阶段:gcc -S main.i -o main.s
编译阶段主要有五件事:
(1)进行词法分析;
(2)语法分析;
(3)语义分析;
(4)代码优化;
(5)生成汇编指令
编译阶段的语言属于低级语言.
3.汇编阶段:gcc -c main.s -o main.o
汇编阶段主要是翻译指令(即将低级语言翻译成机器语言).
4.链接阶段:gcc -o main.o main
链接阶段主要做汇编阶段未做的事情:
(1)强弱符号的处理;
(2)外部符号的处理;
(3)指令段中虚假地址和虚假偏移的处理;
(4)符号的重定位.
<stdio.h>里面放的是申明;
Windows中的可执行文件的格式是PE格式;
Linux中可执行文件的格式是ELF格式.