GCC: 编译C语言的流程

声明

这篇博文 makefile: gcc 工作流程 早期被我放在 CSDN 上面过.时隔多年, 仍不能忘怀, 现乔迁至此.

本文比较简单, 比较适合初学者.
我只是试图以实例的方式给大家讲解一下 GCC 编译链接 C语言程序的流程, 并没有高深的知识.

编译流程

C 语言经过预处理、编译、连接最后生成可执行文件.

在 Linux 的 GCC 下面,看看其工作流程. 流程图如下:
1

预处理,将包含的 *.h 文件或者一些预处理语句(如 #define)处理一下,然后将 *.c 文件生成 *.i 的中间文件.

注意了 GCC 不会自动生成这样一个文件,如果需要,自己加 -E 参数即可.

编译、汇编阶段生成 *.o 目标文件,最后经过链接生成可执行文件.

注意:可执行文件不一定是 exe 文件.

实例

下面以一个实例 hello.c,说明这个过程.

1

源文件很简单,这里只是为了说明问题.

在命令行,执行下面命令完成预处理:

gcc -E hello.c -o hello.i

执行之后,你可以打开 hello.i 文件,可以看到很多 extern 以及将 MAX 解释为 20:
1

在命令行,执行下面命令, 完成编译阶段:

gcc -S hello.i -o hello.s

这时可以生成 *.s 文件,其实就是一些汇编语句,如下所示:
1

那麽,我们就可以进入汇编阶段了,执行:

gcc -c hello.s -o hello.o

打开这个 hello.o 文件,都是一些机器码.

最后一个连接生成可执行文件:

gcc hello.o -o hello

在当前目录就可以生成 hello 这个可执行文件.

执行 ./hello,就会输出:
1

到此,GCC 编译连接生成可执行文件完毕!

当前目录下面的文件:
1

以上的步骤,其实一句命令即可:

gcc hello.c -o hello

此时目录内容如下:
1

自己动手感受一下,你会收获更多!

GCC 系列博文

坚持原创技术分享,您的支持将鼓励我继续创作!