交叉编译
交叉编译是在一个平台上生成另一个平台的可执行代码,例如我们在Windows编写的C51的代码,并编译生成在C51上可执行的xxx.hex文件,这个文件是在C51上运行的而不是在Windows运行的。

为什么要进行交叉编译
目的平台资源匮乏,缺少我们需要的编译器,导致某些文件无法编译运行。
目的平台还没有建立,连操作系统都没有,因此即使树莓派有自己的操作系统(linux),当树莓派的目的平台还没有建立时一样也要进行交叉编译,因为操作系统也是代码,一样要进行编译。

目的平台运行至少需要两种东西:BootLoader(启动引导代码)以及操作系统核心,这也就是为什么需要交叉编译的原因


交叉编译需要的工具
交叉编译器
目的平台的交叉编译工具链
宿主机(Linux虚拟机):编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机
目标机(目的平台,树莓派):用户开发的系统,通常都是非X86平台,宿主机编译得到的可执行的代码在目标机上运行


Linux虚拟机为树莓派进行交叉编译
下载交叉编译工具链(树莓派)
Raspberry Pi · GitHub

使用命令unzip 解压该zip压缩包



进入目录配置环境变量 /tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin



配置临时有效的环境变量,仅在当前命令窗口有
1:命令echo $PATH 查看当前环境变量




2:命令export PATH=??将/snap/bin替换成当前路径得到新的环境变量



3:回到工作目录测试交叉编译工具链



配置永久有效的环境变量,所有命令窗口有效
1:回到工作目录,命令sudo vi .bashrc进入隐藏文件bashrc



2:将刚刚配置临时有效的环境变量后新环境变量写入该文件



3:执行命令source .bashrc 让刚刚写入的内容生效



使用交叉编译工具链来交叉编译文件
配置好环境变量后就能在任何目录底下使用交叉编译链来编译文件了



可以看到使用gcc和交叉编译链编译的可执行文件的文件属性不一样,gcc编译的可执行文件属于x86平台,交叉编译链编译的可执行文件属于ARM平台

交叉编译时链接第三方库
由于我们使用的是交叉编译链编译目的平台的可执行文件,因此当我们需要链接第三方库时,该库应该也是目的平台的第三方库,否则该交叉编译链将不认识此库,怎么使用第三方库可以看往期博文。