GCC是一族工具的集合,包含预处理器、编译器、汇编器、链接器。
 对于默认的文件名,GCC可以自动选择工具自动完成文件处理过程。
 从C语言的源程序道可执行文件,实质上是依靠GCC调用一系列工具完成的。
GCC默认处理的文件
| 文件类型 | 扩展名 | 文件说明 | 
|---|---|---|
| 文本文件 | *.c | C源文件 | 
| 文本文件 | *.c | C源文件 | 
| 文本文件 | *.cpp | C++源文件 | 
| 文本文件 | *.i | 预处理后的C源文件 | 
| 文本文件 | *.ii | 预处理后的C++源文件 | 
| 文本文件 | *.s | 汇编语言 | 
| 文本文件 | *.h | 头文件 | 
| 二进制文件 | *.o | 目标文件 | 
| 二进制文件 | *.so | 动态库(共享库) | 
| 二进制文件 | *.a | 静态库(归档文件) | 
Binutils工具集合
Binutils是一个二进制工具集合,包含汇编、链接以及一系列的辅助工具。
| 工具名称 | 说明 | 
|---|---|
| as | GNU汇编器。将处理器的汇编代码转换成可执行代码,并存储道目标文件.o文件中 | 
| ld | GNU链接器。将一个或多个目标文件.o库组合成一个可执行程序;或者生成静态库和动态库 | 
| ar | 归档工具,可以将多个文件组合成一个大文件,并且可以读取原始文件的内容 | 
| stripe | 取出文件中的符号 | 
| nm | 用来显示目标文件中的符号 | 
| objectcopy | 转换成二进制代码的工具 | 
| objdump | 显示目标文件的反汇编工具 | 
| readelf | 显示ELF文件中的各种信息 | 
| string | 显示文件中的可打印字符 | 
| ranlib | 产生归档文件的索引,并将其保存到归档文件中,索引同时列出归档文件各成员所定义的可重分配目标文件 | 
| addr2line | 可以将一个可执行程序的地址映射到源文件的对应行 | 
| gprof | 显示程序调用段的各种数据 | 
C语言编译工作流程
分为4步:
 1、预处理:生成.i文件
 2、编译:将预处理后的文件转换成汇编语言,生成文件.s
 3、汇编:由汇编代码生成目标代码,即机器代码,生成可执行文件.o
 4、链接:有各个文件的目标代码生成可执行程序
 