初识交叉编译

交叉编译是在一个系统上为另一个系统生成可执行代码的过程,常用于资源有限或未建立操作系统的平台。例如,在Windows上用Keil进行C51或STM32的交叉编译。本文介绍了为何需要交叉编译(如资源限制或平台未建立),并详细阐述了如何在Linux上使用arm-linux-gnueabihf-gcc交叉编译树莓派程序,包括环境变量配置、工具链安装和版本检查。
摘要由CSDN通过智能技术生成

交叉编译的概念

1.什么是交叉编译?为什么要交叉编译?

是什么?
交叉编译: 交叉编译是在一个平台上生成另一个平台上的可执行代码。

我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行
我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行

C51 stm32 交叉编译的发生在keil(集成环境上面)

编译 :是在一个平台上生成在该平台上的可执行代码。

为什么?
平台上不允许或不能够安装我们所需要的编译器 (比如C51):
1.有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器(一般是内存不足)
2.树莓派是不是就不需要交叉编译?

错,也要 树莓派有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。(操作系统也是代码,也要编译!)

总结:需要交叉编译的原因有两个:首先,在项目的起始阶段,目的平台尚未建立,因此需要做交叉编译,以生成我们所需要的bootloader(启动引导代码)以及操作系统核心;其次,当目的平台能启动之后,由于目的平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。

平台运行需要两样至少东西:bootloader(启动引导代码)以及操作系统核心

交叉编译基本知识

交叉编译例子:
在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码
基础知识:
宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。
prefix:交叉编译器的安装位置。
交叉编译需要用到什么工具?
交叉编译器、交叉编译工具链

树莓派(或其他平台)交叉编译工具链的安装

不同平台用到的交叉编译工具链是不一样的

1.打开网址https://github.com/raspberrypi/下载,放入共享文件夹,用来让Ubuntu可以从共享文件夹中拷贝出来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

虚拟机设置共享文件夹
2 . 从共享文件夹拷贝到工作目录cp /mnt/hgfs/share/tools-master.zip(也可以直接拖拽)
在这里插入图片描述
3. 解压unzip tools-master.zip
在这里插入图片描述

4 . cd tools-master/arm-bcm2708/
5 . cd gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

gcc编译在本地执行的程序,arm-linux-gnueabihf-gcc编译出来在树莓派执行的程序

临时有效 环境变量配置

PATH环境变量

echo $PATH(显示当下环境变量)
在这里插入图片描述
1.首先获取arm-linux-gnueabihf-gcc所在的目录(使用pwd)

在这里插入图片描述
2.用export PATH 临时添加环境变量
(export PATH=$PATH: xxx/xxx/xxx/——在 “ $ PATH : ” 后面加上pwd得到的路径)
在这里插入图片描述
这样就可以在其它目录下使用arm-linux-gnueabihf-gcc命令了,但是临时配置在打开另一个终端的时候就不起作用了。
在这里插入图片描述

永久有效 环境变量配置

修改工作目录下的.bashrc (用来配置命令终端的)隐藏文件
1.先进入工作目录 (直接敲cd命令)
在这里插入图片描述

2.编辑.bashrc
在这里插入图片描述
3. export PATH=$PATH: xxx/xxx/xxx/ 添加到.bashrc里面
在这里插入图片描述
4. source /home/用户名字/.bashrc加载配置文件,生效配置

在这里插入图片描述
5.使用arm-linux-gnueabihf-gcc编译程序,file+可执行文件,可以查看文件属性
在这里插入图片描述

在这里插入图片描述

检查交叉编译工具版本

arm-linux-gnueabihf-gcc -v (这里的版本是4.8.3)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值