为什么要交叉编译?
一、什么是交叉编译、为什么要交叉编译
1、什么是交叉编译?
交叉编译:是在一个平台上生成另一个平台上的可执行代码。比如我们在 x86 平台上,编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的,必须放到 ARM 平台上才能运行。
我们在Windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行
编译:是在一个平台上生成在该平台上的可执行代码,
2、为什么要交叉编译?
2.1、交叉编译的目标系统一般都是内存较小、显示设备简陋甚至没有,没有能力在其上进行本地编译,无法运行我们所需要编译器,比如C51,C51 交叉编译的发生在keil(集成环境上面)
2.2、有能力进行源代码编译的平台CPU架构或操作系统与目标平台不同;
平台运行需要两样至少东西:bootloader(启动引导代码)以及操作系统核心
交叉编译器用到的工具:交叉编译器
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。
如:在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。
二、交叉编译工具链的安装
- 树莓派交叉编译工具链安装
下载地址:
https://github.com/raspberrypi/
- OrangePi_Zero2交叉编译工具链安装
参考OrangePi_Zero2用户手册Orange Pi Zero2-Orange Pi官网-香橙派(Orange Pi)开发板,开源硬件,开源软件,开源芯片,电脑键盘
从共享文件夹拷贝到工作目录
cp /mnt/hgfs/sharefromwindows/tools-master.zip .
解压
unzip tools-master.zip
进入文件夹bin目录
cd /home/zyf/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
获取路径 pwd
配置环境变量
1、环境变量临时有效
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/zyf/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
2、环境变量永久有效
修改工作目录下的.bashrc 隐藏文件,配置命令终端的
vi /home/zyf/.bashrc
在文件最后一行加入
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/zyf/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
加载配置文件,马上生效配置
source /home/zyf/.bashrc
三、交叉编译
检查下交叉编译工具对不对:
arm-linux-gnueabihf-gcc -v
4.8.3
编译:
arm-linux-gnueabihf-gcc xxx.c -o xxx
eg:
服务端:gcc ftpserver.c -I ./ -o serverInX86
客户端:arm-linux-gnueabihf-gcc ftpclient1.c -I ./ -o clientInpi
把编译生成的可执行文件下载到开发板:
scp clientInPi pi@192.168.101.33:/home/pi
指令 文件名 开发板用户名@开发板地址:开发板的绝对路径
注意服务端和客户端需要在同一网段
若出现public key问题,用以下
scp -o StrictHostKeyChecking=no ftpclientARM pi@192.168.101.33:/home/pi
四、带wiringPi库的交叉编译如何进行
1、正常我们先要交叉编译wiringpi库,编译出的库适合树莓派,这时候交叉编译可执行程序的试试,链接库的格式也是正确的。
2、通过-I –L来指定
因为链接的库的格式不对,是宿主机的平台,会出现错误
解决:把树莓派上的wiringpi库拿上来用
3、软链接的引入?
软链接:
1、软连接文件有类似于Windows的快捷方式
2、在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
3、只在你选定的位置上生成一个文件的镜像,不占用磁盘空间
4、如何生成软链接?
ln -s libwiringPi.so.2.52 libwiringPi.so
指令 参数 要被链接的文件 软链接名
5、硬链接
硬链接:
ln libwiringPi.so.2.52 libwiringPi.so
它会在你选定的位置上生成一个和源文件大小相同的文件
6、编译生成
解压wiringpi库的tar.gz文件
命令:tar -zxvf xxx.tar.gz -C /xxx/
查看命令:man tar
编译生成
arm-linux-gnueabihf-gcc relay1.c -I /home/zyf/share/WiringPi/wiringPi -L. –lwiringPi
(这里编译不成功,提示需要用到glibc库,
解决方案:1、把树莓派和ubantu对应的glibc,升级到一致2、直接在树莓派编译,简单高效)
相关文章:
为什么要交叉编译?
一、什么是交叉编译、为什么要交叉编译 1、什么是交叉编译? 交叉编译:是在一个平台上生成另一个平台上的可执行代码。比如我们在 x86 平台上,编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的…...
java版本电子招标采购系统源码—企业战略布局下的采购
智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明࿰…...
【MATLAB数据处理实用案例详解(17)】——利用概念神经网络实现柴油机故障诊断
目录 一、问题描述二、利用概念神经网络实现柴油机故障诊断原理三、算法步骤3.1 定义样本3.2 样本归一化3.3 创建网络模型3.4 测试3.5 显示结果 四、运行结果五、完整代码 一、问题描述 柴油机的结构较为复杂,工作状况非常恶劣,因此发生故障的可能性较大…...
神奇字符串、密钥格式化----2023/5/6
神奇字符串----2023/5/6 神奇字符串 s 仅由 ‘1’ 和 ‘2’ 组成,并需要遵守下面的规则: 神奇字符串 s 的神奇之处在于,串联字符串中 ‘1’ 和 ‘2’ 的连续出现次数可以生成该字符串。 s 的前几个元素是 s “1221121221221121122……” 。…...
STM32F4_十进制和BCD码的转换
目录 前言 1. BCD码 2. BCD码和十进制转换的算法 前言 最近在学习STM32单片机(不仅仅是32)的RTC实时时钟系统的过程中,需要配置时钟的时间、日期;这些都需要实现BCD码和十进制之间进行转换。这里和大家一起学习BCD码和十进制之…...
random — 伪随机数生成器(史上总结最全)
目的:实现几种类型的伪随机数生成器。 random 模块基于 Mersenne Twister 算法提供了一个快速的伪随机数生成器。Mersenne Twister 最初开发用于为蒙特卡洛模拟器生成输入,可生成具有分布均匀,大周期的数字,使其可以广泛用于各种…...
基于VBA实现成绩排序的最佳方法-解放老师的双手
作为一名老师,每到期末就要面对一件让人头疼的事情——成绩表统计。 首先,要收集每个学生的考试成绩。这需要花费大量的时间和精力,因为每个学生都有多门科目的成绩需要统计。 其次,要将每个学生的成绩录入到电子表格中。这看起来…...
OCAF如何实现引用关系和拓扑关系
在 OpenCASCADE 中,TDF_Label 是用来保存对象及其属性的基本单元。TDF_Label 可以通过添加不同类型的属性来保存不同的数据类型。属性是继承自 TDF_Attribute 类的对象,每个属性都有一个唯一的标识符(GUID)来识别其类型。TDF_Label是OpenCASCADE中用来管理数据的标签类,它…...
自动创建设备节点
在成功加载驱动模块之后,还需要使用 mknod命令创建设备节点,才能在/dev目录下创建对应的设备文件。自动创建设备节点的功能需要依赖 mdev 设备管理机制,在使用 buildroot 构建 rootfs 的时候,会默认构建 mdev 的功能,m…...
JavaWeb ( 六 ) JSP
2.4.JSP JSP (Java Server Pages) : 一种在服务器端生成动态页面的技术,本质上就是Servlet。将HTML代码嵌入到Java代码中, 通过Java逻辑控制HTML代码的结构从而生成页面。在MVC中通常担任视图层(view),负责信息的展示与收集。 2…...
2023世界超高清视频产业发展大会博冠8K明星展品介绍
2023世界超高清视频产业发展大会博冠8K明星展品介绍: 一、博冠8K全画幅摄像机B1 这是一款面向广电应用的机型,可适配外场ENG制作轻量化需求,应用于8K单边机位、新闻、专题的拍摄工作,也可应用于体育转播、文艺节目等特殊机位及各…...
Map接口以及Collections工具类
文章目录 1.Map接口概述1.1 Map的实现类的结构1.2 Map中存储的key-value结构的理解1.3 HashMap的底层实现原理(以JDK7为例)1.4 Map接口的常用方法1.5 TreeMap1.6 Map实现类之五: Properties 1.Collections工具类1.1方法1.1.1 排序操作(均为static方法)1.1.2 查找、替换 1.Map接…...
SOA协议DDS和Some/IP对比
SOME/IP 和 DDS 均已被纳入AUTOSAR AP的平台标准中。 SOME/IP 和 DDS是在不同的应用场景和不同的需求下诞生的技术,所以它们之间注定有很大的区别。 SOME/IP SOME/IP的全称为:Scalable service-Oriented MiddlewarE over IP,是一种面向服务…...
Sass使用
前言: 这份记录,主要是记录学习sass的学习记录,用于记录一些本人认为可能以后会用到的比较常用的一些知识点,更详细的请看sass官网 功能1-嵌套规则 Sass 允许将一套 CSS 样式嵌套进另一套样式中,内层的样式将它外层的…...
超大excel文件读,避免内存溢出
excel40M,但是用传统的读取excel方法,会报内存溢出的错误。 所以采用了下面的方式,能解决此问题: maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><ve…...
第0章 学习之前的准备
突然想写点关于linux的东西,一是将自己几十年来零碎的知识作以串联,二是能为正在学习路上的新手作些指引。而恰好作者的孩子是一位初一的学生,我写的这些东西也正是我手把手教授他的,现在分享出来并且命名为《linux中学教程》&…...
数组排序sort()方法
sort() 方法对数组的项目进行排序。 排序顺序可以是按字母或数字,也可以是升序(向上)或降序(向下)。 默认情况下,sort() 方法将按字母和升序将值作为字符串进行排序。 一、语法 array.sort(compareFunct…...
【.NET AI Books 前言】Azure OpenAI Service 入门
本书是为 .NET 开发者而写的,让 .NET 开发者能快速掌握 Azure OpenAI Service 的使用技巧。 ChatGPT 的到来意味着我们已经置身于 AI 引起的全新变革中,作为开发者你可能将面临几种改变: GPT 模型到来后,如何去架构好企业解决方案…...
散列查找实验(开散列) 题目编号:583
题目描述 请设计一个整型开散列表,散列函数为除留余数法,其中散列表的长度、除留余数法的模和关键码的个数由键盘输入,再根据输入由键盘输入所有的关键码。分别对三个待查值在散列表中进行查找,输出查找结果采用头插法。 输入描…...
Java版spring cloud 企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)
工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…...
【SRC漏洞挖掘系列】第04期:文件上传与解析——把图片变成“特洛伊木马”
上期回顾:我们刚用 SQL 注入把数据库翻了个底朝天。本期我们来聊聊更暴力的漏洞——文件上传。如果说 SQL 注入是“偷”,那文件上传就是直接往人家服务器里安炸弹。💣一、为什么文件上传是“高危”?在 SRC 评级里,GetS…...
语雀文档离线备份终极指南:3步轻松实现文档永久保存
语雀文档离线备份终极指南:3步轻松实现文档永久保存 【免费下载链接】yuque2book export yuque repo to a book 将你的语雀文档导出的工具 项目地址: https://gitcode.com/gh_mirrors/yu/yuque2book 你是不是经常担心语雀文档的安全问题?或者需要…...
IPXWrapper终极指南:让90年代经典游戏在现代Windows上重生联机对战
IPXWrapper终极指南:让90年代经典游戏在现代Windows上重生联机对战 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 对于许多怀旧游戏玩家来说,最大的遗憾莫过于那些经典的《星际争霸》、《帝国时代》、《…...
游戏逆向实战:从CALL定位到功能复现,构建自动化辅助框架
1. 游戏逆向基础:理解CALL与基址 游戏逆向工程的核心目标之一就是找到并理解游戏中的关键功能调用(CALL)。这些CALL就像是游戏的"遥控器按钮",按下它们就能触发特定功能。比如释放技能、打开背包、自动寻路等操作&…...
Claude Code cli 以及vscode版本的各种命令参考手册
Claude Code 各种命令参考手册版本说明: 截至 2026 年 4 月,Claude Code 官方文档共收录超过 70 条内置命令与绑定技能。其中约一半为内置命令(行为由 CLI 代码实现),另一半为绑定技能(通过 Prompt 机制实现…...
TTK插件系统扩展指南:自定义Golden生成函数和输入数据生成函数的完整教程
TTK插件系统扩展指南:自定义Golden生成函数和输入数据生成函数的完整教程 【免费下载链接】ops-test-kit TTK(Ops Test Tool Kit)是CANN算子库提供的全链路、自动化、批量化算子测试框架,帮助开发者快速完成算子批量功能验证、性能…...
CANN/cann-bench MHA算子API描述
MHA 算子 API 描述 【免费下载链接】cann-bench 评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台࿰…...
Linux串口编程进阶:深入termios2结构体,搞定CH340/FTDI各种转接器的非标准波特率
Linux串口编程实战:破解CH340/FTDI非标准波特率适配难题 当你在工业物联网项目中尝试将某个9600bps的设备升级到115200bps时,可能会发现某些USB转串口适配器死活不配合——明明代码正确,波特率却始终无法生效。这不是你的错,而是…...
ScienceDecrypting完整指南:3步永久解锁加密PDF文档限制
ScienceDecrypting完整指南:3步永久解锁加密PDF文档限制 【免费下载链接】ScienceDecrypting 破解CAJViewer带有效期的文档,支持破解科学文库、标准全文数据库下载的文档。无损破解,保留文字和目录,解除有效期限制。 项目地址: …...
大麦网Python抢票脚本终极指南:告别手速焦虑,轻松获取心仪门票
大麦网Python抢票脚本终极指南:告别手速焦虑,轻松获取心仪门票 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为心仪演唱会门票秒光而烦恼吗?还在为黄牛高…...
