为什么要用到交叉编译?
- x86 架构的机器上用 gcc/g++ 编译出来的二进制文件是无法在 arm 架构上运行的,反之亦然。
- 嵌入式设备上的CPU/RAM 资源不足以实现本地编译,一般都是在PC上使用交叉编译工具链生成能够在嵌入式设备上运行的可执行程序,再将编译好的程序放到嵌入式设备上去运行。
在 x86架构的机器上 编译出能在 arm架构的开发板 运行的二进制文件需要用到工具
1. native compilation 所需的一些工具
- gcc
- gcc 是 native compilation 所需的工具,她可以将程序从源代码编译成processor 能理解的 machine code
- make
- make 是一个强大的工具,能让我们自动化构建一个项目
- 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.