gcc 编译过程
2017-03-20 本文已影响61人
mnikn
//hello.c
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
gcc -o hello hello.c
在执行上面语句时,-o实际上分多步来处理.c文件。下面我们讲一下gcc的编译过程。
预处理器处理
首先gcc使用预处理器将.c文件中的include文件引入,相当于把#include <stdio.h>替换为stdio.h里面的内容,由于只是进行文本替换,这一步不会检测代码中的语法错误。这个过程会生成.i文件,我们可以通过以下命令生成.i文件。
gcc -E hello.i -o hello.c
gcc -E参数让gcc在预处理后停止编译行为。
转换为目标代码
第二步gcc将hello.i编译为目标代码,这一步会检测代码中的语法错误。这个过程会生成.o文件,我们可以通过以下命令生成.o文件。
gcc -c hello.i -o hello.o
我们会发现.o文件是一堆乱码,因为生成的是二进制文件。
链接为可执行文件
最后一步gcc将.o文件链接为可执行文件,命令如下。
gcc hello.o -o hello
最后执行文件
// ./后不能加空格
./hello