什么是交叉编译
交叉编译 是在一个平台上生成临海一个平台可执行代码.
eg.在windows上面编写C51代码,并编译生成可执行代码。如xx.hex
我们在Ubuntu上编写树莓派的代码,并编译成可执行代码。a.out.
是在树莓派上运行,不在Ubuntu Linux上面运行。
编译:在一个平台上生成该平台上的可执行代码
为什么交叉编译
平台上不允许或不能够安装我们所需要的编译器,如C51
1、平台资源匮乏,无法运行所需要的编译器
2、树莓派也需要交叉编译,、树莓派有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也要编译!
平台运行需要至少两样东西:boot loader 以及操作系统核心
宿主机(host)编辑和编译程序的平台,一般是基于X86的pc机,也被称为主机
目标机(target)用户开发的系统,通常是非x86平台。host编辑得到可执行的代码在target上运行
交叉编译工具链配置
关于编译
编译是指将源代码文件(如C/C++文件)经过预处理、编译、汇编和链接等步骤,转换为可执行文件的过 程。将源代码转换成机器代码的过程称为编译(Compile),编译的工作需要编译器(Complier)来完成
本地编译
本地编译是指在当前的编译平台上,生成能在当前平台上运行的可执行文件
交叉编译
交叉编译是指在当前的编译平台上,生成能在体系结构不同的另一种目标平台上运行的可执行文件。
环境配置
想要在x86平台上进行交叉编译,并在ARM平台上运行这个程序。首先需要在家目录下的.bashrc最后配 置添加交叉编译工具链:
export PATH=$PATH://home/pg/Desktop/orange-build/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin
在x86平台可以编译出arm平台的
aarch64-none-linux-gnu-gcc -o hello1 hello.c
用file查看文件编译出来的程序是ARM aarch64的二进制程序
pg@pg:~/Desktop$ file hello1
hello1: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, with debug_info, not stripped