GNU工具以及GCC对C语言程序的处理流程

138 阅读2分钟

GCC是一族工具的集合,包含预处理器、编译器、汇编器、链接器。
对于默认的文件名,GCC可以自动选择工具自动完成文件处理过程。
从C语言的源程序道可执行文件,实质上是依靠GCC调用一系列工具完成的。

GCC默认处理的文件

文件类型扩展名文件说明
文本文件*.cC源文件
文本文件*.cC源文件
文本文件*.cppC++源文件
文本文件*.i预处理后的C源文件
文本文件*.ii预处理后的C++源文件
文本文件*.s汇编语言
文本文件*.h头文件
二进制文件*.o目标文件
二进制文件*.so动态库(共享库)
二进制文件*.a静态库(归档文件)

Binutils工具集合

Binutils是一个二进制工具集合,包含汇编、链接以及一系列的辅助工具。

工具名称说明
asGNU汇编器。将处理器的汇编代码转换成可执行代码,并存储道目标文件.o文件中
ldGNU链接器。将一个或多个目标文件.o库组合成一个可执行程序;或者生成静态库和动态库
ar归档工具,可以将多个文件组合成一个大文件,并且可以读取原始文件的内容
stripe取出文件中的符号
nm用来显示目标文件中的符号
objectcopy转换成二进制代码的工具
objdump显示目标文件的反汇编工具
readelf显示ELF文件中的各种信息
string显示文件中的可打印字符
ranlib产生归档文件的索引,并将其保存到归档文件中,索引同时列出归档文件各成员所定义的可重分配目标文件
addr2line可以将一个可执行程序的地址映射到源文件的对应行
gprof显示程序调用段的各种数据

C语言编译工作流程

分为4步:
1、预处理:生成.i文件
2、编译:将预处理后的文件转换成汇编语言,生成文件.s
3、汇编:由汇编代码生成目标代码,即机器代码,生成可执行文件.o
4、链接:有各个文件的目标代码生成可执行程序
在这里插入图片描述