交叉编译相关知识

  1. 交叉编译概念
    交叉编译时一种和本地编译相对的概念,用来区分编译环境和运行环境。
    交叉编译:在两个不同的系统之间运行的程序的编译称为交叉编译,例如在linux编译的程序在ARm设备上运行。
    本地编译:在一个系统下进行编译和运行的程序的编译称为本地编译,例如各种语言的IDE编辑器。

  2. 为什么要有交叉编译
    在嵌入式开发过程中,嵌入式系统中并没有足够的资源进行代码的编译操作,也装不下编译器等庞大的程序,只能在linux或者window下进行编译链接操作,在存入嵌入式系统中直接运行。

  3. 工具链和交叉工具链
    工具链:字面意思理解,就是一条各种工具形成的链条,相当于流水线,从编译到链接形成可执行程序
    交叉工具链:相当于交叉编译器,即交叉编译的Gcc等

  4. 交叉编译器的命名规则
    arch-vendor-kernel-system
    其中:
    Arch:即要运行的系统架构,也是目标环境,例如Arm
    vendor:作者名称,也有使用体系架作为名称的,例如cpu/cpu内核名
    kernel:内核,编译环境,是否带os系统等
    System:系统,一般为库函数名,系统等

  5. 常用交叉编译工具(命令使用方式)
    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:得到代码的覆盖率


日后继续补充命令参数等常见用法
如有错误还劳请指正,非常谢谢.

猜你喜欢

转载自blog.csdn.net/Double_YH/article/details/79962231