arm-eabi, arm-linux-androideabi, arm-linux-gnueabi, arm-none-linux-gnueabi工具链的区别
链接工具命名方式为:
arch-vendor-os-abi , 即cpu构架, 供应商, 操作系统, abi类型
例如:
1、arm-none-linux-gnueabi
(ARM architecture, no vendor, linux OS, and the gnueabi ABI)
用于编译ARM架构的u-boot、linux内核、linux应用等
2、arm-none-eabi
用于编译ARM架构的裸机系统(包括linux的 boot、kernel)
3、arm-eabi
Android ARM 编译器
所以标题中提到的工具链表示的含义是:
arm-eabi: (ARM architecture and the EABI)
arm-linux-androideabi: (ARM architecture, linux OS, and the androideabi ABI)
arm-linux-guneabi: (ARM architecture, linux OS, and the gnueabi ABI)
arm-none-linux-gnueabi: (ARM architecture, no vendor, linux OS, and the gnueabi ABI)
工具链的工具通常有:
add2line:将你要找的地址转成文件和行号,它要使用 debug 信息。
ar:产生、修改和解开一个存档文件
as:gnu的汇编器
c++filt:C++ 和 java 中有一种重载函数,所用的重载函数最后会被编译转化成汇编的标,c++filt 就是实现这种反向的转化,根据标号得到函数名
gprof:gnu 汇编器预编译器
ld:gnu 的连接器
nm:列出目标文件的符号和对应的地址
objcopy:将某种格式的目标文件转化成另外格式的目标文件
objdump:显示目标文件的信息
ranlib:为一个存档文件产生一个索引,并将这个索引存入存档文件中
readelf:显示 elf 格式的目标文件的信息
size:显示目标文件各个节的大小和目标文件的大小
strings:打印出目标文件中可以打印的字符串,有个默认的长度,为4
strip:剥掉目标文件的所有的符号信息