GNU工具链(GNU toolchain)是一个包含了由GNU项目所产生的各种编程工具的集合。这些工具形成了一条工具链(串行使用的一组工具),用于开发应用程序和操作系统。 GNU工具链中包含的项目有:
1. GNUmake
make 是一个命令工具,它解释 Makefile 中的指令(应该说是规则),将源文件按照程序员的意愿组织和编译
2. GCC
GCC,它并不只是一个C Compiler,GCC实际是GNU Compiler Collection的简称,可以支持C、C++、Object C、JAVA、Fortran、PASCAL等多种高级语言,主要包括如下工具:
cpp:GNU预处理器(Preprocessor),主要用于扩展用户源程序的头文件和宏定义。GNU C Compiler在编译前自动使用cpp对用户程序进行转换。
3. GNU Binutils
其中GNU Binutils是一套用来构造和使用二进制所需的工具集。建立嵌入式交叉编译环境,Binutils工具包是必不可少的,而且Binutils与GNU的C编译器gcc是紧密相集成的,没有Binutils,gcc也不能正常工作的。Binutils的官方下载地址是:ftp://ftp.gnu.org/gnu/binutils/,在这里可以下载到不同版本的Binutils工具包。
3.1 addr2line
将地址转换成文件名或行号对
3.2 ar
ar用于建立、修改、提取档案文件(archive)。archive是一个包含多个被包含文件的单一文件(也称之为库文件),其结构保证了可以从中检索并得到原始的被包含文件(称之为archive中的member)。member的原始文件内容、模式(权限)、时间戳、所有着和组等属性都被保存在 archive中。member被提取后,他们的属性被恢复到初始状态。
3.3 as
汇编器,gcc在汇编的时候会调用
3.4 gcov
用于查看代码的覆盖率
3.5 grpof
打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。产生程序运行时候的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流程
3.6 ld
链接器,gcc在连接的时候调用
3.7 nm
列出ELF(目标文件、库或可执行文件)文件中的代码符号以及所对应的程序开始地址,如果没有指定文件则默认是a.out
3.8 objcopy
用来拷贝或是翻译目标文件,它可以把目标文件的内容从一种文件格式复制到另一种格式的目标文件中
3.9 objdump
帮助我们显示程序文件的相关信息,可以反编译二进制文件,也可以对对象文件进行反汇编,并查看机器代码。
3.10 ranlib
用于生成一个档案文件的内容索引。这样做的目的是为了加快档案文件的访问速度,比如,我们常对静态库文件(.a 文件)进行ranlib 以提高连接速度。
3.11 readelf
显示符号、段信息、二进制文件格式的信息等,这在分析编译器如何工从源代码创建二进制文件时非常有用
3.12 size
用于显示程序文件的段信息
3.13 strings
用于显示一个程序文件当中的可显示字符串
3.14 strip
用于剥去程序文件中的符号信息,以减小程序文件的大小。这对于存储空间有限的嵌入式系统尤为有用。
4. GDB
著名的调式工具,估计大家都接触过
5. GNU autotools
这里只做一个概要介绍,在接下来的文章里将详细解述
参考 http://zh.wikipedia.org/zh/GNU_toolchain