编译工具链就是编译出所需要的内核,库函数以及应用程序所使用的工具。编译工具主要由以下3部分组成:
binutils:一组开发工具,包括连接器,汇编器和其他用于目标文件和档案的工具
gcc:包含GNU编译器的集合,其中有C和C++编译器
glibc:提供系统调用和基本函数的C库,比如open,malloc,printf等。所有动态连接的程序都要用到它
GNU binutils 是一个二进制工具包,主要包括:
ld-GNU的连接器
as-GNU汇编器
除此之外还包括以下工具:
addr2line -将地址转化为文件名和行号
ar -创建、修改、解压归档文件
c++filt - C++ 关键词过滤器
gprof - 显示总体信息
nlmconv - 将目标代码转换为NLM
nm - 列出目标文件的标记
objcopy - 复制和翻译(编译器翻译)目标文件
objdump - 显示目标文件信息
ranlib - 创建归档文件索引
readelf - 显示ELF 格式目标文件的索引
size -列出目标文件或者归档文件的段长
strings -列出文件中的可打印字符串
strip - 删除标记
windres - Windows 源文件的编译器
这中间的大部分程序都使用Binary File Descriptor library来进行底层处理。很多程序还要用到 opcodes library 来进行机器指令的汇编
和Wintel一样,binutils也被引入到了各种各样的UNIX系统中,它的引入使得GNU系统能够更方便的编译和连接程序。