⼿把⼿搭建armmips交叉编译环境
⼀、什么是交叉编译
对于没有做过嵌⼊式编程的⼈,可能不太理解交叉编译的概念,那么什么是交叉编译?它有什么作⽤?
在解释什么是交叉编译之前,先要明⽩什么是本地编译。
本地编译
本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运⾏。平时我们常见的软件开发,都是属于本地编译:
⽐如,我们在 x86 平台上,编写程序并编译成可执⾏程序。这种⽅式下,我们使⽤ x86 平台上的⼯具,开发针对 x86 平台本⾝的可执⾏程序,这个编译过程称为本地编译。
交叉编译
交叉编译可以理解为,在当前编译平台下,编译出来的程序能运⾏在体系结构不同的另⼀种⽬标平台上,但是编译平台本⾝却不能运⾏该程序:
⽐如,我们在 x86 平台上,编写程序并编译成能运⾏在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运⾏的,必须放到 ARM 平台上才能运⾏。
⼆、为什么会有交叉编译
之所以要有交叉编译,主要原因是:
Speed:⽬标平台的运⾏速度往往⽐主机慢得多,许多专⽤的嵌⼊式硬件被设计为低成本和低功耗,没有太⾼的性能
Capability:整个编译过程是⾮常消耗资源的,嵌⼊式系统往往没有⾜够的内存或磁盘空间
Availability:即使⽬标平台资源很充⾜,可以本地编译,但是第⼀个在⽬标平台上运⾏的本地编译器总需要通过交叉编译获得Flexibility:⼀个完整的Linux编译环境需要很多⽀持包,交叉编译使我们不需要花时间将各种⽀持包移植到⽬标板上
三、什么是交叉编译⼯具链
⼀般所说的⼯具链,指的是本地平台⾃⼰的⼯具链。⽽⽤于交叉编译的⼯具链,就是交叉⼯具链。交叉⼯具链中,gcc编译器、ld链接器以及其他的相关⼯具,都是⽤来跨平台交叉编译的。
交叉⼯具链与本地⼯具链类似,也有交叉编译版本的gcc, ld, as等⼯具,与本地⼯具链两两对应。交叉⼯具链中最重要的⼯具还是编译器gcc,所以我们也经常把交叉⼯具链简称为交叉编译器,即严格意义上来讲,交叉编译器指的是交叉编译版本的gcc,但为了叫法上的⽅便,我们平常说的交叉编译,其实指的都是交叉⼯具链。
例如常⽤的交叉编译器arm-linux-gcc,其实是⼀系列交叉编译版本的交叉⼯具链,其中包含了arm-linux-gcc, arm-linux-ld, arm-linux-as等⼯具。
四、如何部署交叉编译环境
国产UOS
更新⼀下apt源
$ sudo apt-get update
执⾏命令安装
$ sudo apt-get install emdebian-archive-keyring
$ sudo apt-get install linux-libc-dev-mips64el-cross libc6-mips64el-cross
# sudo apt-get install linux-libc-dev-arm64-cross libc6-arm64-cross
$ sudo apt-get install binutils-mips64el-linux-gnuabi64 gcc-8-mips64el-linux-gnuabi64
# sudo apt-get install binutils-aarch64-linux-gnu gcc-8-aarch64-linux-gnu
$ sudo apt-get install g++-8-mips64el-linux-gnuabi64
# sudo apt-get install g++-8-aarch64-linux-gnu
#注释的内容为aarch64 架构的交叉编译链⼯具
验证:执⾏命令
$ mips64el-linux-gnuabi64-gcc-8 -dumpmachine
mips64el-linux-gnuabi64
五、编写第⼀个Hello world
创建c⽂件
$ vim hello.c
// 程序头⽂件
#include <stdio.h>
// 主⼊⼝函数
int main(int arc, char* argv[])gnu编译器
{
printf("Hello World!\n");
return 0;
}
编译第⼀个程序
$  mips64el-linux-gnuabi64-gcc-8 -o hello hello.c
查看⽂件类型
$ file hello
hello: ELF 64-bit LSB pie executable, MIPS, MIPS64 rel2 version 1 (SYSV), dynamically linked, interpreter
/lib64/ld.so.1, BuildID[sha1]=0860832b7cdda9bc95325462a0c79b78ffe3b3f0, for GNU/Linux 3.2.0, not stripped

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。