GCC编译工具链

当我们编写程序的时候,会用到编译器。那么编译器是什么呢?

我们使用的计算机只能够识别0和1的机器语言,不能识别高级语言编写的程序;而编译器的作用即将高级语言编写成机器能够识别的机器语言。

 GCC GNU C Compiler 。也是一个交叉编译器,即编译和运行的平台不一样。GCC 已经不仅仅能支持 C 语言;还支持 Ada语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的Mercury 语言,等等。 GCC GNU Compiler Collection 也即是 GNU 编译器家族的意思。

下面将简单介绍gcc编译器的编译链。 主要分为四部分:预处理(预编译)、编译、汇编、链接。

1:预处理

        格式:gcc -E demo.c -o demo.i(以demo为例,下同)

        处理什么:(1)头文件:#include“”;

                        (2)宏定义:#define A B;

                        (3)条件编译:#ifdef . .#else . .#endif . . .;

                        (4)注释;

目的:帮助编译器处理一些不是核心的东西,让编译器处理最核心的东西。

2:编译:将文件编译成汇编文件。(.s文件)

        格式:(1)gcc -S demo.i

                  (2)gcc -S demo.i -o demo.s

                  (3)gcc -S demo.c

                  (4)gcc -S demo.c -o demo,s

3:汇编:将文件生成机器码(.o文件)

        格式:(1)gcc -c demo.c

                  (2)gcc -c demo.i(前提有.i文件)

                  (3)gcc -c demo.s(前提有.s文件)

(4)链接:将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。

        平常用的是:gcc demo.c(默认生成a.out文件)

        也可以:gcc demo.c -o demo;

其中:-c :只是编译不链接,生成目标文件“.o”;

          -S :只是编译不汇编,生成汇编代码;

          -E :只进行预编译,不做其他处理。


你可能感兴趣的:(GCC编译工具链)