工具链软件包括binutils、gcc、glibc、gdb等。 binutils:二进制程序处理工具,包含链接器、汇编器等程序处理工具。
gcc:GNU Compiler Collection,编译器,对于C/C++语言的完整支持,需要支持glibc库。
glibc:是应用程序编程的函数库软件包,可以编译生成静态库和共享库。完整的GCC需要支持glibc。
gdb:调试工具,可以读取可执行程序中的符号表,对程序进行源码调试。
默认情况下,GNU编译器生成的目标文件格式为elf格式。 elf文件由若干段(section)组成。 C:.text(正文段)包含程序的指令代码 .data(数据段)包含固定的数据,如常量、字符串 .bss(未初始化数据段)未初始化变量、数组等。 C++:.fini(析构函数代码) .init(构造函数代码) 链接生成的elf格式文件还不能直接下载到目标平台上执行,可通过objcopy工具生成最终二进制文件。 链接器的任务就是将多个目标文件的.text、.data、.bss等段连接在一起,而连接脚本告诉链接器从什么地址开始放置这些段。