树莓派12:交叉编译的概念,交叉编译工具链安装,项目运行

交叉编译的概念,工具链安装,项目运行

1.交叉编译的概念

交叉编译是什么?

编译:是在一个平台上生成该平台上的可执行代码
交叉编译: 是在一个平台上生成另一个平台上的可执行代码
(我们在windows上面编写C51代码,并编译成可执行代码,xx.hex,但在c51上面运行,不在windows上运行)
(我们需要在linux上面编写树莓派代码,并编译成可执行代码,如:a.out,但在树莓派上运行,不在linux上运行)
C51,STM32:交叉编译发生在keil(集成环境上面)

既然我们已经有了主机编译器,那为什么还要交叉编译呢?

有时是因为目的平台上不允许或不能够安装我们所需要的编译器,
比如:C51
1.因为目的平台上的资源贫乏,无法运行我们所需要编译器
2.因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也要编译。

既然可以交叉编译,那还要主机编译干吗?

交叉编译是不得已而为之!与主机编译相比,交叉编译受的限制更多,虽然在理论上我们可以做任何形式的交叉编译,但事实上,由于受到专利、版权、技术的限制,并不总是能够进行交叉编译,尤其是在业余条件下!举例来说,我们至今无法生成惠普公司专有的som格式的可执行文件,因此我们根本无法做目的平台为HPPA-HPUX的交叉编译。

平台运行需要至少两样东西:

bootloader(启动引导代码)以及操作系统核心

宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。

目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。

交叉编译需要用到的工具?

交叉编译器(交叉编译工具链)

2.树莓派(或者其它平台)交叉编译工具链的安装

交叉编译工具链的安装

举例:使用keil进行编译的时候需要对交叉编译器(交叉编译工具链)进行选型,C51,STM32;

代码的移植性高:是指一段代码编译后可以在不同的平台上运行;比如:C51,STM32,代码的修改部分不是很多

我们需要用到树莓派的交叉工具链:

下载网址:
树莓派交叉编译工具链
tools----code

将Windows下的压缩包拉至Linux下,并移动到建好的pi文件夹
//也可以从共享文件夹拷贝到工作目录
在终端执行以下操作:

cd pi       //进入文件夹,
ls          //显示 tools-master.zip
unzip tools-master  //解压文件夹
。。。      //等待
cd tools-master
ls   //显示文件夹
cd arm-bcm2708  
ls
cd gcc-linaro-arm-linux-gnueabihf-raspbian//选择32位编辑器
ls
cd bin
ls   //可以看到一堆绿色的可执行文件
./arm-linux-gnueabihf-gcc -v //去执行该文件
//---------------过程太过繁琐
//1.临时有效:配置环境变量
//PATH 环境变量:目的是省去敲写前面的乱七八糟的文件夹
echo $PATH  //接下来配置环境变量
pwd  //显示当前绝对路径
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/dazai/pi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
  //配置环境变量
 cd      //回到根目录
 arm-linux-gnueabihf-gcc -v  //用来编译树莓派可执行文件
 //二gcc是用来编译本地可执行文件
 //之所以是临时,是因为如果你再打开一个终端窗口,就木得了
2.永久有效:修改.bashrc 隐藏文件
修改工作目录下的.bashrc 隐藏文件,配置命令终端的
//在根目录下:cd
vi .bashrc   //或者
gedit .bashrc
//将:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/dazai/pi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
//放到106行的fi下面
//之后保存退出
source .bashrc   //使其生效
//之后再打开任何一个终端窗口都含有(认识):arm-linux-gnueabihf-gcc


至此,树莓派编辑器(交叉编译工具链),安装完成。

3.交叉编译服务器客户端

一个简单的程序:

#include <stdio.h>
int main()
{
    
    
	printf("hello\n");
	return 0;
}
gcc text.c -o text_1//编译
file text_1   //查看编译后的文件可执行在哪些系统上

在这里插入图片描述

怎样把text.c放到树莓派上去运行,我们用到交叉编译工具:

arm-linux-gnueabihf-gcc text.c -o text_2
file text_2

在这里插入图片描述将text_2可执行文件复制到树莓派操作系统

linux终端下:

scp text_2 pi@192.168.1.100:   //注意: 后面跟路径,可以不写
//密码:raspberry

树莓派操作系统下:
在这里插入图片描述
通过以上交叉编译,可实现将上位机书写的程序编译成树莓派能够运行的可执行程序

猜你喜欢

转载自blog.csdn.net/weixin_40734514/article/details/108703397
今日推荐