当前位置: 首页 > article >正文

05-树莓派-交叉编译

交叉编译的概念

交叉编译是什么

来源百度百科:

交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。
举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。

简单说就是在一个平台上生成另一个平台上的可执行代码

为什么要交叉编译

  1. 有时候平台上不允许或不能够安装我们所需要的编译器
  2. 目的平台上的资源贫乏,无法运行我们所需要的编译器

交叉编译需要用什么工具

交叉编译器、交叉编译工具链

树莓派交叉编译工具链的安装

安装工具链

树莓派官方下载网址:https://github.com/raspberrypi/
交叉工具链下载链接:https://github.com/raspberrypi/tools.git

下载工具链

方法一:
在这里插入图片描述
搜索tools,找到tools工具
之后下载完成之后导入到ubantu系统之中即可
在这里插入图片描述
下载完之后,自己找一个文件夹,解压出来。
输入命令unzip tools-master.zip

进入文件目录

进入目录:/tools-master/arm-bcm2708
我们先进入解压出来的目录,通过ls命令我们可以看到,里面有很多。
在这里插入图片描述
如果我们的Ubuntu系统使用的64位系统则进入,图片中的目录:gcc-linaro-arm-linux-gnueabihf-raspbian-x64
进入该目录中的bin目录当中:

cd gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/

我们可以看到很多:
在这里插入图片描述
我们需要使用的工具是arm-linux-gnueabihf-gcc
该玩意是一个软连接,我们通过ls -l可以查看到具体情况。在这里插入图片描述

配置环境变量

配置环境变量分为两种,
临时环境变量:只在当前命令窗口有效,换个窗口就无效了。
永久环境变量:任何页面都行

配置临时环境变量

  • 我们可以通过命令echo $PATH查看环境变量
    在这里插入图片描述
  • 使用pwd命令可以查看到我们当前路径
$ pwd
/home/pi/smp_tools/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
  • 使用export PATH=$PATH:路径添加环境变量
    export PATH=$PATH:/home/pi/smp_tools/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
  • arm-linux-gnueabihf-gcc -v检测是否配置成功

配置永久环境变量

  • 修改工作目录下.bashrc隐藏文件
    将上方临时配置环境变量的命令添加在文件中。
export PATH=$PATH:/home/pi/smp_tools/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
  • 使用source 命令立马加载配置文件
source .bashrc

交叉编译

常规编译我们使用gcc,交叉编译,我们使用arm-linux-gnueabihf-gcc编译
随便写一段程序进行测试。

pi@pi-virtual-machine:~/smp_test$ gcc hello.c 
pi@pi-virtual-machine:~/smp_test$ arm-linux-gnueabihf-gcc hello.c -o v
pi@pi-virtual-machine:~/smp_test$ ls
a.out  hello.c  v
pi@pi-virtual-machine:~/smp_test$ ./v
bash: ./v: cannot execute binary file: Exec format error
pi@pi-virtual-machine:~/smp_test$ gcc hello.c 
pi@pi-virtual-machine:~/smp_test$ arm-linux-gnueabihf-gcc hello.c -o b.out
pi@pi-virtual-machine:~/smp_test$ ls
a.out  b.out  hello.c  v
pi@pi-virtual-machine:~/smp_test$ file a
a: cannot open `a' (No such file or directory)
pi@pi-virtual-machine:~/smp_test$ file a.out 
a.out: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=7a90285756e892dff6f6f06e8372b28a37c8af04, for GNU/Linux 3.2.0, not stripped
pi@pi-virtual-machine:~/smp_test$ file b.out 
b.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.26, BuildID[sha1]=42dfeee4f03eab86ab6b259df78aefc782fe1d64, not stripped

带wiringPi库的交叉编译

我们在进行树莓派开发的时候,很多是使用了wiringPi的,编译这种程序的时候,由于我们Ubuntu系统中未安装wiringPi导致无法编译成功,所以我们需要先交叉编译WiringPi。

官方地址:https://github.com/WiringPi/WiringPi

  • 下载编译wiringPi库
    可使用命令https://github.com/WiringPi/WiringPi.git进行安装,网络不好可下载我提供下载链接。
  • 安装

但是,这样子我们编译出来的wiringPi是基于X86的,我们无法编译成功。

下载树莓派中的WiringPi

我们进入树莓派中,下载树莓派中的WiringPi。

  • 使用命令cd /usr/lib进入树莓派WiringPi文件路径
    我们可以看到wiringPi库
    在这里插入图片描述
  • 将WiringPi复制到虚拟机 scp /usr/local/lib/libwiringPi.so.3.10 pi@192.168.174.249:/home/pi/smp_wiringpi
  • 在虚拟机中创建软连接 ln -s libwiringPi.so.3.10 libwiringPi.so

相关链接

看这篇吧,干不下去了:https://blog.csdn.net/v13111329954/article/details/142673904


http://www.kler.cn/a/430069.html

相关文章:

  • 预训练语言模型——BERT
  • MATLAB语言的循环实现
  • DEV C++软件下载
  • 【SOC 芯片设计 DFT 学习专栏 -- RTL 中的信号名和 Netlist 中的信号名差异】
  • 前端JavaScript中some方法的运用
  • 【C++/控制台】2048小游戏
  • PHP和GD如何给图片添加滤镜效果
  • 【QNX+Android虚拟化方案】134 - QNX侧配置开机自动抓取tcpdump 报文
  • 第一篇:k8s架构与组件详解
  • 自然语言处理:从入门到精通全指引
  • 【LLMs】用LM Studio本地部署离线大语言模型
  • 从零开始的使用SpringBoot和WebSocket打造实时共享文档应用
  • 学生信息管理系统(简化版)
  • 动画Lottie
  • 微服务篇面试题
  • 亚马逊云科技Swami博士:生成式AI即将达到临界点
  • ESP32-S3模组上跑通ES8388(24)
  • 【时间序列预测】基于PyTorch实现CNN_BiLSTM算法
  • 【NextJS】Arco Design与Next.js快速上手
  • PDF提取文本
  • 微知-如何根据git reflog恢复到操作之前的状态?(git reflog; git reset --hard xxx)
  • NAT traversal 原理 | TCP / UDP/ P2P
  • 大数据笔记之flink集群的安装部署
  • 微信小程序中使用miniprogram-sm-crypto实现SM4加密攻略
  • OpenSSH和OpenSSL升级
  • 博物馆导览系统方案(一)背景需求分析与核心技术实现