前言:编程
GCC 原名为 GNU C 语言编译器(GNU C Compiler),由于它本来只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又
扩展可以支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各种处理器架构上的汇编语言等,因此改
名GNU编译器套件(GNU Compiler Collection)。(百度百科,想了解本身查询)vim
一.GCC程序的编译过程大概分四个阶段架构
二.简单HelloWorld程序的编译过程编程语言
示例:HelloWorld.cspa
1 #include <stdio.h> 2 int main() 3 { 4 printf("Hello World!\n"); 5 return 0; 6 }
Ctrl+Alt+T --->打开控制台--->输入vim HelloWorld.c命令行
1. 执行以下命令:$ gcc -o HelloWorld HelloWorld.c3d
运行以下 : $ ./HelloWorld
输出: HelloWorld!code
2. 分步编译以下:
(1) $ gcc –E HelloWorld.c -o HelloWorld.iblog
能够输出HelloWorld.i文件中存放着HelloWorld.c经预处理以后的代码。打开HelloWorld.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码.编译器
gcc的-E选项,可让编译器在预处理后中止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到HelloWorld.c中了。
//预处理结束
//这时候你看一下HelloWorld.i ,能够看到插进去了不少东西。
(2) $ gcc –S HelloWorld.i
gcc的-S选项,表示在程序编译期间,在生成汇编代码后,中止,-o输出汇编代码文件。
查看下HelloWorld.s //生成汇编代码后结束
(3)生成汇编代码文件HelloWorld.s之后,须要gas汇编器负责将其编译为目标文件,以下:
$ gcc –c HelloWorld.c
或者:
$ gcc -c HelloWorld.c –o HelloWorld.o
或者:
$ gcc -c HelloWorld.i -o HelloWorld.o
//编译结束
//生成 HelloWorld.o文件
(4) $ gcc HelloWorld.o –o HelloWorld 生成链接,可执行文件(HellWorld从新生成的可执行文件)
gcc链接器是gas提供的,负责将程序的目标文件与所需的全部附加的目标文件链接起来,最终生成可执行文件。
附加的目标文件包括静态链接库和动态链接库。
对于上一小节中生成的HelloWorld.o,将其与C标准输入输出库进行链接,最终生成程序HelloWorld可执行文件
输入命令:gcc HelloWorld.o –o HelloWorld--->生成以下图:
3. 多个程序文件的编译
通常状况一个程序都是有若干个文件源文件组成,因此编译的时候须要造成多个编译单元,使用GCC编译器能够将多个源文件编译成所须要的程序
好比:源文件有main.c a.c b.c 最终生成一个可执行的文件main
好比:一个工程有main.c a.c b.c生成test的可执行文件。
编译命令以下:
$ gcc –c main.c a.c b.c –o main
或者:
$ gcc –o main main.c a.c b.c
GCC仍然会按照预处理、编译和连接的过程依次进行
大概过程至关于:
gcc -c main.c -o main.o
gcc -c a.c -o a.o
gcc -c b.c -o b.o
最后:
gcc main.o a.o b.o -o main