树莓派(Linux系统通用)交叉编译(环境搭建、简单使用)
概念
交叉编译是指在一台计算机上编译运行在另一台计算机上的程序。(编译是指,在一个平台上生成在该平台上的可执行程序)通常情况下,编译器和目标平台的架构是不同的,例如,在一台x86平台上编译运行在ARM平台上的程序。(单片机常用KEIL上面编译代码就是交叉编译)比如我们在Linux环境上编写树莓派的使用代码,生成可执行代码,下载到树莓派中运行的这一个过程。
交叉编译需要使用交叉编译工具链,包括交叉编译器、库文件、头文件等。交叉编译器可以将源代码编译成目标平台的可执行文件,而库文件和头文件则提供了目标平台的系统调用和函数定义等信息。
交叉编译通常用于嵌入式系统开发、操作系统开发、科学计算等领域。通过交叉编译,可以在一台通用的计算机上快速编译出多个平台的程序,提高开发效率和代码可移植性。
为什么要使用
-
硬件平台限制:如果您的程序需要在特定的硬件平台上运行,但您的开发计算机不具备该硬件平台,那么您可以使用交叉编译来生成该平台上的可执行文件。
-
软件依赖性:如果您的程序依赖于特定的库或工具链,而这些库或工具链只适用于另一种操作系统或计算机架构,那么您可以使用交叉编译来生成该平台上的可执行文件。
-
提高编译效率:交叉编译可以在一台计算机上并行编译多个目标平台的程序,从而提高编译效率和节省时间。
-
安全性:交叉编译可以将程序的源代码和编译器隔离开来,从而减少了潜在的安全风险。
总结:平台上不允许或不能够安装我们所需要的编译器,比如C51 ;
1.因为目的平台上的资源贫乏,无法运行我们所需要编译器
2.树莓派是不是就不需要交叉编译?
错。也要树莓派有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也要编译!
平台运行需要两样至少东西:bootloader(后动引导代码)以及操作系统核心
宿主机(host):编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。
工具链的安装
下载工具
下载链接https://github.com/raspberrypi/



把文件弄到Ubuntu里面
下载好之后在Ubuntu系统里面开启共享文件

这里我已经添加,道友们可以点击添加按钮,找到下载的工具包路径,或者自己创建一个文件夹把刚刚下载的包放到里面,然后选择路径,点击确定就可以。
开始安装
默认共享文件路径在 , xxx表示你创建的共享文件夹名字
/mnt/hgfs/xxx/
通过cd /mnt/hgfs/xxx/ 到该目录下;ls 指令可以看到tools-master.zip
使用unzip tools-master.zip解压如果解压不成功可以加权限 sudo unzip tools-master.zip
然后cd tools-master/ 再用 ls 查看到arm-bcmxxx文件,我当时下载的是arm-bcm2708
然后cd arm-bcm2708/ 再用 ls 看到gcc-linaro-arm-linux-gnueabihf-raspbian-x64如果你的环境是32位的使用不带x64的就可以。

继续使用图中指令
可以看到能够使用的一下东西。
环境路径变更
从上面知道,想要使用这个工具要到的路径太深,不可能每次使用都到这个路径。我们需要改变使用路径,在什么路径底下都可以使用。
临时变更
使用echo $PATH 显示当前工具的环境变量路径

再使用指令 pwd 看变量位置

使用指令 export PATH= 将图中花圈路径的拼接

回到主目录查看是否成功,图中这样能够找到,打开对应文件就是成功
永久变更
临时的肯定不好,每次开机都要重新配置
修改隐藏的配置文件 .bashrc
使用图中指令找到最开始的目录
![]()
然后
拉到最后面,添加刚才的内容,保存退出

更新一下 ,就可以了
分享一个技巧:输入指令history 可以查看到你使用过的所有指令。
使用
创建一个文件test1.c
如果只是gcc 编译,只能在x86-64环境下执行编译和的程序
使用arm-linux-gnueabihf-gcc test1.c -o test_1 能够看到可以在ARM-Linux平台使用

通过scp test_1 pi@192.18.1.41:Desktop 把可执行程序移动到树莓派。
注意:pi是我的树莓派用户名,192.168.1.41是我的树莓派地址
然后选择yes进入,输入你的树莓派密码。

到树莓派查看是否成功,图中能够找到test_1证明成功了, ./test-1 就可以执行

然后你会发现运行失败
原因是没有链接到编写代码环境的地址

上图是编译环境的地址192.168.91.128
在编译环境这边: ./test1 192.168.91.128 8880
注意:test1是在编译环境下gcc编译的 地址是编译环境地址 8880是端口号(自己设置)
树莓派端: ./test_1 192.168.91.128 8880
避免篇幅太长wiringPi库的交叉编译放在下一篇文章。
相关文章:
树莓派(Linux系统通用)交叉编译(环境搭建、简单使用)
概念 交叉编译是指在一台计算机上编译运行在另一台计算机上的程序。(编译是指,在一个平台上生成在该平台上的可执行程序)通常情况下,编译器和目标平台的架构是不同的,例如,在一台x86平台上编译运行在ARM平…...
uniapp - 微信小程序实现腾讯地图位置标点展示,将指定地点进行标记选点并以一个图片图标展示出来(详细示例源码,一键复制开箱即用)
效果图 在uniapp微信小程序平台端开发,简单快速的实现在地图上进行位置标点功能,使用腾讯地图并进行标点创建和设置(可以自定义标记点的图片)。 你只需要复制代码,改个标记图标和位置即可。...
网络安全--IDS--入侵检测
1. 什么是IDS? IDS---入侵检测是防火墙的一个有力补充,形成防御闭环,可以及时、准确、全面的发现入侵弥补防火墙对应用层检查的缺失。对系统的运行状态进行监视,发现各种攻击企图、过程、结果,来保证系统资源的安全&a…...
js实现数组去重方式(12种方法)
目录 1、filter indexOf2、for object3、for includes4、for splice5、filter indexOf6、Map7、Set8、set Array.from9、sort 排序10、for findIndex11、双重for循环12、reduce 1、filter indexOf 数组去重:利用 filter 过滤 配合 indexOf 查找元素 var a…...
AI智能语音机器人的优势
1.高效自动拨号功能。 导入客户数据,外呼机器人自动拨号,无需看守,真人录音话术,定制场景问答和1秒内的问答响应,为客户带来真实准确的咨询体验。同时,每次通话结束后,外呼系统根据通话时间和关…...
BERT: 面向语言理解的深度双向Transformer预训练
参考视频: BERT 论文逐段精读【论文精读】_哔哩哔哩_bilibili 背景 BERT算是NLP里程碑式工作!让语言模型预训练出圈! 使用预训练模型做特征表示的时候一般有两类策略: 1. 基于特征 feature based (Elmo)…...
5-1.(OOP)初步分析MCV架构模式
组成:模型(model)、视图(view)、控制器(controller) view:界面、显示数据 model:数据管理、负责在数据库中存取数据以及数据合法性验证 controller:负责转…...
如何利用React和Flutter构建跨平台移动应用
如何利用React和Flutter构建跨平台移动应用 移动应用已经成为现代生活的一部分,每天都有大量的手机用户在使用各种各样的应用程序。对于开发者来说,构建一个适用于多个平台的移动应用是一个挑战。幸运的是,有一些工具可以帮助我们轻松地实现…...
npm install / webdriver-manager update报错 unable to get local issuer certificate
我这边遇到的问题,用的是angular,跑npm install的时候报错,一开始在.npmrc添加strict-sslfalse但是还是报错,搜索下记录。 参考解决: selenium - webdriver-manager update, Error: unable to get local issuer certi…...
电商项目高级篇-02 elasticsearch-下
电商项目高级篇-02 elasticsearch-下 4.2、QueryDSL返回指定字段 4.2、QueryDSL 返回指定字段 返回单个字段 GET bank/_search {"query": {"match_all": {}}, "sort": [{"balance": {"order": "desc"}}], &quo…...
计算机竞赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…...
CloseableHttpClient详解
实现项目中的HttpUtil用到CloseableHttpClient,httpUtil源码:https://download.csdn.net/download/imwucx/88378340 于是学习CloseableHttpClient并记录一下。 一、CloseableHttpClient是什么? CloseableHttpClient实现了AutoCloseable接口和…...
从mysql 5.7 升级到 8.0 的一些注意事项
最近 mysql 5.7 版本将会终止安全更新,越来越多的朋友考虑升级 mysql 8.0,以下是一些刚开始使用时可能存在差异问题的地方,有一些其实在 mysql 5.7 版本里已经开始使用,这里整理一下方便查阅。 1、关于端口,该版本 My…...
喜迎中秋国庆双节,华为云Astro Canvas之我的中秋节设计大屏
目录 前言 前提条件 作品展示 薅羊毛 前言 大屏应用华为云Astro Canvas是华为云低代码平台Astro的子服务之一,是以数据可视化为核心,以屏幕轻松编排,多屏适配可视为基础,用户可通过图形化界面轻松搭建专业水准的数据可视化大屏…...
C++ stoi()函数的用法
stoi()函数的作用 将字符串转为相应进制,可以是8进制,10进制,16进制等,默认的情况下是10进制 stoi源码里面定义 stoi(const string& __str, size_t* __idx 0, int __base 10) 注意:idx 这个可能是版本的问题&…...
Learn Prompt- Midjourney案例:动漫设计
使用 Midjourney 生成动漫有两种方法:使用Niji模式或使用标准的 Midjourney 模型。Niji V5 是 Midjourney 的动漫专用模型。它建立在标准 Midjourney 模型的全新架构之上,更擅长生成命名的动漫角色。Niji V4于2023年12月发布,Niji V5于2023年…...
亚马逊无线鼠标FCC认证办理 FCC ID
无线鼠标是指无线缆直接连接到主机的鼠标,采用无线技术与计算机通信,从而省却电线的束缚。通常采用无线通信方式,包括蓝牙、Wi-Fi (IEEE 802.11)、Infrared (IrDA)、ZigBee (IEEE 802.15.4)等多个无线技术标准。随着人们对办公环境和操作便捷…...
MySQL常见数据类型、特点以及使用场景
以下是一些常见的MySQL数据类型及其特点,包括数据类型的占用字节数、最大存储值和适用场景: 1. 整数类型: TINYINT:1字节,范围从-128到127(有符号),0到255(无符号&…...
vue markdown显示为html
1、安装依赖markdown-it yarn add markdown-it 2、在页面中引用 import MarkdownIt from markdown-it3、实例化markdown-it const md new MarkdownIt()4、输出 <div class"answer" v-html"md.render(mdTxt)"></div>通过markdown-it可以将m…...
Spring整合RabbitMQ——生产者(利用配置类)
1.生产者配置步骤 2.引入依赖 3.编写配置 配置RabbitMQ的基本信息,用来创建连接工厂的 编写启动类 编写配置类 4. 编写测试类...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...
CTF show 数学不及格
拿到题目先查一下壳,看一下信息 发现是一个ELF文件,64位的 用IDA Pro 64 打开这个文件 然后点击F5进行伪代码转换 可以看到有五个if判断,第一个argc ! 5这个判断并没有起太大作用,主要是下面四个if判断 根据题目…...
大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...
java+webstock
maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...
Pandas 可视化集成:数据科学家的高效绘图指南
为什么选择 Pandas 进行数据可视化? 在数据科学和分析领域,可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 内置的可视化功能因其与数据结…...
【R语言编程——数据调用】
这里写自定义目录标题 可用库及数据集外部数据导入方法查看数据集信息 在R语言中,有多个库支持调用内置数据集或外部数据,包括studentdata等教学或示例数据集。以下是常见的库和方法: 可用库及数据集 openintro库 该库包含多个教学数据集&a…...
JS设计模式(5): 发布订阅模式
解锁JavaScript发布订阅模式:让代码沟通更优雅 在JavaScript的世界里,我们常常会遇到这样的场景:多个模块之间需要相互通信,但是又不想让它们产生过于紧密的耦合。这时候,发布订阅模式就像一位优雅的信使,…...
