为什么要用到交叉编译?

  • x86 架构的机器上用 gcc/g++ 编译出来的二进制文件是无法在 arm 架构上运行的,反之亦然。
  • 嵌入式设备上的CPU/RAM 资源不足以实现本地编译,一般都是在PC上使用交叉编译工具链生成能够在嵌入式设备上运行的可执行程序,再将编译好的程序放到嵌入式设备上去运行。

x86架构的机器上 编译出能在 arm架构的开发板 运行的二进制文件需要用到工具


1. native compilation 所需的一些工具

  • gcc
    • gcc 是 native compilation 所需的工具,她可以将程序从源代码编译成processor 能理解的 machine code
  • make
    • make 是一个强大的工具,能让我们自动化构建一个项目
  • binutils
    • binutils 是一组二进制工具集

2. cross compilation 所需要用到的一些工具

  • gcc-arm-linux-gnueabi
    • gcc 是编译器的名称, arm 编译后的二进制文件运行的目标平台, linux是arm开发板上运行的 operation system。eabi 的全称是 embedded application binary interface 。是我们应用和 操作系统 之间的接口。明确了我们的 data 和 code会在内存中如何存储,以及连接器如何工作。
  • gcc-arm-linux-gnueabihf
    • 当我们明确知晓 arm 开发板的硬件(hardware)是支持 float运算,我们可以使用这个gcc-arm-linux-gnueabihf 工具去进行交叉编译。
  • binutils-arm-linux-gnueabi
    • 可以同时进行 native compilation 和 cross compilation.