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、链接:有各个文件的目标代码生成可执行程序