C语言——编译器如何将C源文件编译成可执行代码?

Posted yanzhuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言——编译器如何将C源文件编译成可执行代码?相关的知识,希望对你有一定的参考价值。

步骤:

  1. 预编译阶段。

    预处理器插入”#include”所包含的内容,删除注释,展开源文件中的宏,从而生成预编译文件。

  2. 编译阶段。

    编译器先将预编译文件转换为汇编源文件,再将汇编源文件转换为二进制文件。

  3. 链接阶段。

    链接器将编译生成的二进制文件、使用的库函数的二进制文件和启动代码的二进制文件链接在一起,生成可执行程序。

C语言——编译器如何将C源文件编译成可执行代码?

图一 流程图

C语言——编译器如何将C源文件编译成可执行代码?

举例如下:

Windows环境下的GCC编译器

C语言——编译器如何将C源文件编译成可执行代码?

图二 源文件test.c

01

预编译

命令行:gcc -E test.c -o test.i

C语言——编译器如何将C源文件编译成可执行代码?

图三 预编译文件test.i(部分)

可以看到,stdio.h文件已经被包含进test.i中。

02

编译

命令行:gcc -S test.c -o test.s

C语言——编译器如何将C源文件编译成可执行代码?

图四 汇编源文件test.s(部分)

命令行:gcc -c test.c -o test.o

C语言——编译器如何将C源文件编译成可执行代码?

图五 二进制文件test.o(部分)

03

链接

命令行:gcc test.o -o test

C语言——编译器如何将C源文件编译成可执行代码?

图六 所有文件

C语言——编译器如何将C源文件编译成可执行代码?

图七 执行结果


以上是关于C语言——编译器如何将C源文件编译成可执行代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何最好地将 C++/Cython 项目编译成可执行文件?

Java底层-Javac编译器

如何将javascript代码编译为c++或java

C代码通过编译器编译成可执行文件, 需经历 预处理编译汇编链接 四个阶段

程序编译链接后形成的可执行文件是啥文件

C代码编译成可执行程序的过程