目标代码编译
#include<stdio.h>
int main(){
printf("hello world");
return 0;
}
使用gcc简单编译
gcc hello.c
./a.out
具体流程
预处理
gcc -E hello.c -o hello.i
主要是处理#开始的预编译命令:
删除所有#define,展开宏定义
处理所有预编译指令:如#if
处理#include 预编译指令
删除注释
添加行号和文件标识
不包含任何宏定义,所有宏定义都展开
编译
gcc -S hello.i -o hello.s
编译过程相当于词法分析,语法分析,语义分析,优化后生成的汇编代码文件。实际上gcc这个命令的包装,根据参数调用编译程序cc1,汇编器as ,链接器ld
汇编
gcc -c hello.s -o hello.o
汇编代码转换为可以执行的指令
链接
ld -static crt1.o crti.o crtbeginT.o hello.o -start-group -lgcc -lgcc_eh -lc -end-group crtend.o crtn.o
至此编译完成,可执行文件