交叉编译概念
交叉编译时一种和本地编译相对的概念,用来区分编译环境和运行环境。
交叉编译:在两个不同的系统之间运行的程序的编译称为交叉编译,例如在linux编译的程序在ARm设备上运行。
本地编译:在一个系统下进行编译和运行的程序的编译称为本地编译,例如各种语言的IDE编辑器。为什么要有交叉编译
在嵌入式开发过程中,嵌入式系统中并没有足够的资源进行代码的编译操作,也装不下编译器等庞大的程序,只能在linux或者window下进行编译链接操作,在存入嵌入式系统中直接运行。工具链和交叉工具链
工具链:字面意思理解,就是一条各种工具形成的链条,相当于流水线,从编译到链接形成可执行程序
交叉工具链:相当于交叉编译器,即交叉编译的Gcc等交叉编译器的命名规则
arch-vendor-kernel-system
其中:
Arch:即要运行的系统架构,也是目标环境,例如Arm
vendor:作者名称,也有使用体系架作为名称的,例如cpu/cpu内核名
kernel:内核,编译环境,是否带os系统等
System:系统,一般为库函数名,系统等常用交叉编译工具(命令使用方式)
1.arm-linux-gcc:编译链工具
2.arm-linux-add2line:将地址与程序的行数一一对应,一般在函数出错时使用
3.arm-linux-objcopy: 复制函数,一般用于最后的进制转换,通过编译链接后生成的ELF转换成二进制bin文件
4.arm-linux-readelf:显示ELF文件的信息,文件架构、大小端或者动态运行库等信息
5.arm-linux-ar:建立,提取将文件归档
6.arm-linux-ld:链接器,链接编译过后的文件
7.arm-linux-objdump:显示文件信息,一般为写交叉编译工具的人提供
8.arm-linux-size:列出文件的每一段或者每一块的大小
9.arm-linux-nm:列出(.o)文件中每种符号的统计清单
10.arm-linux-strip:丢弃目标文件中的特定或者全部符号
11.arm-linux-cc:
12.arm-linux-gprof:程序分析优化命令,显示函数调用等信息以便开发人员优化代码
13.arm-linux-c++filt:在c++和Java中提供了函数重载,该命令使得重载的函数可以被系统识别
14.arm-linux-as:将汇编程序转成ELF文件,提供交叉编译的参考表于符号表
15.arm-linux-ldd:显示程序可执行时必备的依赖库(由shell脚本实现)
16.arm-linux-strings:打印文件中可打印的字符串
17.arm-linux-ranlib:产生归档文件的索引
18.arm-linux-gcov:得到代码的覆盖率
日后继续补充命令参数等常见用法
如有错误还劳请指正,非常谢谢.