gcc编译源码

350 阅读1分钟

目标代码编译

#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 

至此编译完成,可执行文件