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

树莓派(Linux系统通用)交叉编译(环境搭建、简单使用)

概念

交叉编译是指在一台计算机上编译运行在另一台计算机上的程序。(编译是指,在一个平台上生成在该平台上的可执行程序)通常情况下,编译器和目标平台的架构是不同的,例如,在一台x86平台上编译运行在ARM平台上的程序。(单片机常用KEIL上面编译代码就是交叉编译)比如我们在Linux环境上编写树莓派的使用代码,生成可执行代码,下载到树莓派中运行的这一个过程。

交叉编译需要使用交叉编译工具链,包括交叉编译器、库文件、头文件等。交叉编译器可以将源代码编译成目标平台的可执行文件,而库文件和头文件则提供了目标平台的系统调用和函数定义等信息。

交叉编译通常用于嵌入式系统开发、操作系统开发、科学计算等领域。通过交叉编译,可以在一台通用的计算机上快速编译出多个平台的程序,提高开发效率和代码可移植性。 

为什么要使用 

  1. 硬件平台限制:如果您的程序需要在特定的硬件平台上运行,但您的开发计算机不具备该硬件平台,那么您可以使用交叉编译来生成该平台上的可执行文件。

  2. 软件依赖性:如果您的程序依赖于特定的库或工具链,而这些库或工具链只适用于另一种操作系统或计算机架构,那么您可以使用交叉编译来生成该平台上的可执行文件。

  3. 提高编译效率:交叉编译可以在一台计算机上并行编译多个目标平台的程序,从而提高编译效率和节省时间。

  4. 安全性:交叉编译可以将程序的源代码和编译器隔离开来,从而减少了潜在的安全风险。

总结:平台上不允许或不能够安装我们所需要的编译器,比如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的基本信息&#xff0c;用来创建连接工厂的 编写启动类 编写配置类 4. 编写测试类...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...