GCC是Linux系统中最为著名得编译器,它是由Richard Stallman在1984年编写的。
1、GCC基础
由于GCC支持多种语言,因此GCC能够支持多种文件后缀的编译
后缀名 | 意义 |
.c | C源文件 |
.C/.cpp/.cc/.cxx | C++源文件 |
.h | 头文件 |
.m | Object C源文件 |
.i | 已经预处理过的C源文件 |
.ii | 已经预处理过的C++源文件 |
.s | 汇编语言源文件 |
.o | 目标源文件 |
.a | 编译后得静态库文件 |
.so | 编译后得动态库文件 |
2、GCC的编译方式
GCC指令得一般格式:
gcc [选项] 源文件名 [选项] 目标文件名
◆采用默认得方式编译源文件,系统会生成a.out可执行文件
◆采用显式编译成目标文件,在编译成可执行文件
gcc -c hello.c
gcc -o hello hello.o
◆直接编译成可执行文件
gcc -o hello hello.c
3、GCC编译流程
编译器的输入是程序的源文件,输出是可执行得文件或者可分发得二进制代码,中间过程便是编译器要完成得工作。其程序得编译流程为:
程序的编译流程图
事实上编译器也是按照上图中的流程来进行编译的,分为四个步骤:
◆预处理
本阶段是针对头文件(.h)进行编译,即将这些头文件编译到当前源文件中,预处理常用得选项是-E,它的作用是告诉编译器,当预处理结束后停止编译。
主要工作:
①展开头文件。
②进行宏替换。
预处理的输入是.c文件,输出是.i文件
命令:gcc -E 源文件 -o 目标文件
◆编译
本阶段是对代码得规范性,语法得正确性进行检查,并编译成汇编语言。编译常用的选项是-S,它的作用是告诉编译器,当编译结束时,停止编译。
主要工作:
①检查语法。
②生成汇编文件
编译的输入是.i文件,输出是.s文件
命令:gcc -S源文件 -o 目标文件
◆汇编
本阶段是将汇编语言翻译成目标文件,汇编常用的选项是-c,它的作用是告诉编译器,当汇编阶段结束时停止编译。
主要工作:
①生成二进制文件。
汇编的输入是.s文件,输出是.o文件
命令:gcc -c 源文件 -o 目标文件
◆链接
本阶段是将所有的目标文件以及相应的库文件编译成可执行文件,链接并不需要选项,只需要制定生成的可执行文件名。
链接的输入是.o文件,输出是可执行文件
命令:gcc 源文件 -o 目标文件
4、GCC命令分类
GCC有12类选项,分别是总体选项、语言选项、预处理选项、汇编器选项、链接器选项、目录选项、警告选项、调试选项、优化选项、目标选项、机器相关选项、代码生成选项。
◆总体选项
总体选项是GCC中最常用的选项
参数名 | 意义 |
-E | 只进行预处理 |
-c | 将源文件生成目标文件 |
-S | 生成汇编文件 |
-o outfile | 输出的结果放到outfile文件中 |
-g | 在可执行程序中添加调试代码 |
-v | 打印出编译器编译过程中的信息 |
-static | 静态链接库 |
-llibrary | 链接名为library得库文件 |