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
上一篇下一篇

猜你喜欢

热点阅读