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

交叉编译工具链的安装及带wiringPi库的交叉编译实现

交叉编译工具链的安装及带wiringPi库的交叉编译实现

  • 交叉编译的概念
  • 交叉编译工具链的安装
    • 下载交叉编译工具链
    • 配置环境遍变量
    • 编译程序到ARM平台
  • 带wiringPi库的交叉编译
    • 下载编译wiringPi库
    • 调用树莓派的wringPi库

交叉编译的概念

  • 交叉编译是在一个平台上生成另一个平台上的可执行代码。
  • 因为目的平台上的资源贫乏,无法运行我们所需要编译器
  • 宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
  • 目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。

交叉编译工具链的安装

下载交叉编译工具链

  • 通过 树莓派官方 提供的交叉编译工具链下载并拷贝至ubuntu解压,其中解压指令为:

    unzip tools-master.zip
    

  • 下载,解压进入以下路径(64位机):tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

  • 通过 ls -l 查看所指向的真正目标文件

  • 查看arm-linux-gcc 版本 ./arm-linux-gnueabihf-gcc -v

  • 查看当下环境变量 echo $PATH
    在这里插入图片描述

配置环境遍变量

临时有效: 在当前环境变量中添加bin的路径地址,即在当下配置环境变量 :export PATH=$PATH:[bin所在的路径]

export PATH=$PATH:/home/yuanjl/pi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

在这里插入图片描述

永久有效:

  • 打开目录下的.bashrc隐藏文件(配置命令终端):

    vi /home/yuanjl/.bashrc
    
  • 在文件最后添加环境变量指令

    export PATH=$PATH:/home/yuanjl/pi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
    
  • 重新生效.bashrc文件

     source /home/yuanjl/.bashrc
    
  • 新终端测试arm-linux-gcc版本

编译程序到ARM平台

  • 程序编译 arm-linux-gnueabihf-gcc xx.c -o xxx
    在这里插入图片描述
  • 拷贝可执行程序到开发板 scp xxx pi@192.168.137.114:/home/pi

带wiringPi库的交叉编译

下载编译wiringPi库

通过克隆官方wiringPi库获取

git clone git://git.drogon.net/wiringPi

查看安装INSTALL文件

在这里插入图片描述
构建:

./build

编译程序:

arm-linux-gnueabihf-gcc demo2.c -I /home/yuanjl/pi/WiringPi/WiringPi/wiringPi -lwiringPi

报错:

arm-linux-gnueabihf-gcc demo2.c -lwiringPi -I /home/yuanjl/pi/WiringPi/WiringPi/wiringPi 
/home/yuanjl/pi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lwiringPi
collect2: error: ld returned 1 exit status

原因:
在这里插入图片描述

  1. 正常我们先要交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译可执行程序的试试,链接库的格式也是正确的。
  2. 通过 -I -L 来指定

下载的wiringPi缺少configure,无法配置成arm-linux平台,编译出来的库只适合X86平台,不适合Linux平台。

调用树莓派的wringPi库

问题解决: 把树莓派的wringPI库拿上来用

若还没有安装WiringPi库,参考安装:树莓派安装WiringPi库

/usr/lib

在这里插入图片描述

查看软连接

ls -l |grep wiringPi

在这里插入图片描述

将树莓派上的wiringPi拷贝至ubuntu

scp libwiringPi.so.3.10 yuanjl@192.168.118.128:/home/yuanjl/pi

在ubuntu上自行创建软连接:

参考博文:Linux创建连接命令 ln -s创建软连接

为libwiringPi软件软链接:

ln -s libwiringPi.so.3.10 libwiringPi.so

在这里插入图片描述
概念补充:

软链接:

  • 软链接文件有类似于Windows的快捷方式。
  • 在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
  • 你选定的位置上生成一个文件的镜像,不会占用磁盘空间
  • 如何生成:ln -s libwiringPi.so.2.50 libwiringPi.so
  • 指令 参数 要被链接的文件 软链接文件名字

硬链接:

  • ln libwiringPi.so.2.50 libwiringPi.so
  • 它会在你选定的位置上生成一个和源文件大小相同的文件

重新编译程序

arm-linux-gnueabihf-gcc demo2.c -I /home/yuanjl/pi/WiringPi/WiringPi/wiringPi -L. -lwiringPi

相关文章:

交叉编译工具链的安装及带wiringPi库的交叉编译实现

交叉编译工具链的安装及带wiringPi库的交叉编译实现 交叉编译的概念交叉编译工具链的安装下载交叉编译工具链配置环境遍变量编译程序到ARM平台 带wiringPi库的交叉编译下载编译wiringPi库调用树莓派的wringPi库 交叉编译的概念 交叉编译是在一个平台上生成另一个平台上的可执行…...

java: 程序包org.junit.jupiter.api不存在

明明idea没有报错,引用包也没问题,为啥提示java: 程序包org.junit.jupiter.api不存在? 配置!还TMD是配置! 如果是引用包的版本不对或者其他,直接就是引用报错或者pom里面飘红了。 这个应该是把generat…...

代码随想录刷题day32丨动态规划理论基础,509. 斐波那契数, 70. 爬楼梯, 746. 使用最小花费爬楼梯

代码随想录刷题day32丨动态规划理论基础,509. 斐波那契数, 70. 爬楼梯, 746. 使用最小花费爬楼梯 1.动态规划理论基础 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题…...

为什么矩阵特征值之和等于主对角线元素之和,特征值乘积等于行列式值

首先给出特征值和特征向量的定义。 设A是n阶矩阵,如果数λ和n维非零向量x使关系式 Axλx (1) 成…...

学生学籍管理系统可行性分析报告

引言 一、编写目的 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。而学籍管理系统软件,可广泛应用于全日制大、中小学及其他各类学校,系统涵盖了小学、初中、高中学籍…...

C#排序算法新境界:深度剖析与高效实现基数排序

基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数进行比较。具体来说,基数排序有两种方法: 最低位优先(LSD, Least Significant Digit f…...

玩机搞机-----如何简单的使用ADB指令来卸载和冻结系统应用 无需root权限 详细操作图示教程

同类博文: 玩机搞机---卸载内置软件 无root权限卸载不需要的软件 安全卸载_无需root卸载彻底内置软件-CSDN博客 在很多时候我们需要卸载一些系统级的app。但如果直接手机端进行卸载的话。是无法正常卸载的。其实我们可以通过有些成品工具或者完全靠ADB指令来进行卸…...

如何通过 Apache Camel 将数据导入 Elasticsearch

作者:来自 Elastic Andre Luiz 使用 Apache Camel 将数据提取到 Elasticsearch 的过程将搜索引擎的稳健性与集成框架的灵活性相结合。在本文中,我们将探讨 Apache Camel 如何简化和优化将数据提取到 Elasticsearch。为了说明此功能,我们将实…...

打造民国风格炫酷个人网页:用HTML和CSS3传递民国风韵

附源码!!! 感谢支持 小弟不断创作网站demo感兴趣的可以关注支持一下 对了 俺在结尾带上了自己用的 背景 大家可以尝试换一下效果更好哦~~~ 如何创建一个民国风格的炫酷网页 在这篇博客中,我们将展示如何制作一个结合民国风格和…...

豆包MarsCode编程助手:产品功能解析与应用场景探索!

随着现代技术的不断进化升级,人工智能正在逐步改变着我们的日常工作方式。特别是对于复杂的项目,代码编写、优化、调试、测试等环节充满挑战。为了简化这些环节、提高开发效率,许多智能编程工具应运而生,豆包MarsCode 编程助手就是…...

爬虫全网抓取

爬虫全网抓取是指利用网络爬虫技术,通过自动化的方式遍历互联网上各个网站、论坛、博客等,从这些网页中提取所需的数据。它通常涉及以下几个步骤: 目标设定:确定要抓取哪些类型的网页内容,比如新闻、商品信息、用户评论…...

【计算机组成原理】详细解读带符号整数在计算机中的运算

有符号整数的运算 导读一、补码的优势二、补码的加法运算三、补码的减法运算四、原码、反码、补码的特性结语 导读 大家好,很高兴又和大家见面啦!!! 经过前面的介绍,我们已经初步认识了有符号整数的三种表示形式&…...

vue3常见的bug 修复bug

Vue 3 作为 Vue.js 的最新版本,在性能、开发体验以及代码可维护性等方面带来了显著的提升。然而,就像任何软件框架一样,Vue 3 在使用过程中也可能遇到一些典型的bug或问题。以下是一些可能遇到的典型问题: 响应式系统相关的问题&…...

C++课程笔记 类和对象

类概念 结构体&#xff1a;只要属性 类&#xff1a;有属性也有方法 c可以省略struct c不行 #include<iostream> using namespace std;typedef struct queue1 {int a;queue1 q() {queue1 q(2);return q;};queue1(){}queue1(int qa){a qa;} }q1; int main() {queue1 Q1;…...

提问即创作:用Prompt提示词引领AI灵感爆发

文章目录 &#x1f34a;AI内容创作的精髓&#xff1a;提示词Prompt1 什么是提示词工程?1.1 提示词是如何影响AI的输出结果?1.2 提示词的原理是什么1.3 提示词工程师的前景1.4 谁能成为提示词工程师&#xff1f;1.5 提示词的未来前景 2 提示词的基本书写技巧3 常见的提示词框架…...

一码空传临时网盘PHP源码,支持提取码功能

源码介绍 一码空传临时网盘源码V2.0免费授权&#xff0c;该源码提供了一个简单易用的无数据库版临时网盘解决方案。前端采用了layui开发框架&#xff0c;后端使用原生PHP编写&#xff0c;没有引入任何开发框架&#xff0c;保持了代码的简洁和高效。 这个程序使用了一个无数据…...

自然语言处理实战项目

自然语言处理实战项目 自然语言处理&#xff08;NLP, Natural Language Processing&#xff09;是人工智能的重要分支之一&#xff0c;致力于让计算机理解、生成并与人类进行语言交互。随着深度学习、神经网络和大数据的发展&#xff0c;NLP技术在近年来取得了飞跃性的进展&am…...

人工智能物联网的去中心化和分布式学习:全面综述、新兴挑战和机遇

这篇论文的标题是《Decentralized and Distributed Learning for AIoT: A Comprehensive Review, Emerging Challenges, and Opportunities》&#xff0c;作者是Hanyue Xu, Kah Phooi Seng, Li Minn Ang, 和 Jeremy Smith。论文发表在IEEE Access期刊上&#xff0c;接收日期为2…...

滑动窗口算法—最小覆盖子串

题目 ”最小覆盖子串“问题&#xff0c;难度为Hard&#xff0c;题目如下&#xff1a; 给你两个字符串 S 和 T&#xff0c;请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串&#xff0c;则算法返回空串&#xff0c;如果存在这样一个子串&#xff0c;则可…...

应用案例|开源 PolarDB-X 在互联网安全场景的应用实践

背景介绍 中盾数科集团始创于2012年&#xff0c;是由网络安全服务而发展起来的科技型、多元化的企业集团。旗下包括网络安全服务、信创一体化服务、箱式液冷、区块链、位置服务、视觉服务等六大板块&#xff0c;业务覆盖湖南、甘肃、贵州等多个省份。 业务挑战 中盾集团基于A…...

墨语灵犀开源模型生态:对接LangChain/RAG构建专属翻译知识库

墨语灵犀开源模型生态&#xff1a;对接LangChain/RAG构建专属翻译知识库 1. 引言&#xff1a;当古典美学遇见现代AI架构 在人工智能技术快速发展的今天&#xff0c;翻译工具已经从简单的词汇转换演变为理解文化语境和语义深度的智能系统。「墨语灵犀」作为基于腾讯混元大模型…...

突破透明动画性能瓶颈:VAP引擎实现移动端高效视觉体验

突破透明动画性能瓶颈&#xff1a;VAP引擎实现移动端高效视觉体验 【免费下载链接】vap VAP是企鹅电竞开发&#xff0c;用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点。同时支持 iOS,Android,Web 平台。 项目地址: https://gitcode.com/gh_mirrors/va/vap …...

HarmonyOS6 半年磨一剑 - RcTextarea 组件核心架构与类型系统设计

文章目录前言一、组件整体架构1.1 文件结构1.2 装饰器体系二、类型系统深度解析2.1 边框模式类型2.2 清空触发类型2.3 格式化与解析函数类型2.4 文本对齐与回车键类型三、核心参数体系3.1 必传参数3.2 尺寸相关参数3.3 功能开关参数四、内部状态与生命周期4.1 内部状态设计4.2 …...

告别蜗牛速度!优麒麟20.04 LTS换源华为云镜像保姆级教程

优麒麟20.04 LTS提速指南&#xff1a;华为云镜像配置全解析 每次在优麒麟上安装软件时&#xff0c;看着进度条像蜗牛一样缓慢前进&#xff0c;是不是让你感到无比焦虑&#xff1f;特别是当你急需某个工具完成工作时&#xff0c;漫长的等待简直让人抓狂。作为一款基于Ubuntu的国…...

SPIRAN ART SUMMONER优化指南:如何调整参数让生成的图片更符合预期

SPIRAN ART SUMMONER优化指南&#xff1a;如何调整参数让生成的图片更符合预期 1. 理解SPIRAN ART SUMMONER的核心参数 SPIRAN ART SUMMONER作为一款基于Flux.1-Dev模型的图像生成工具&#xff0c;其参数设置直接影响最终输出效果。与普通AI绘画工具不同&#xff0c;它融入了…...

RK3588开发板TF卡槽改造:实现SDIO WIFI模组O9201SB的灵活接入

1. RK3588开发板TF卡槽改造背景与价值 最近在折腾RK3588开发板时&#xff0c;发现一个很有意思的玩法&#xff1a;把原本只能插TF卡的卡槽改造成支持SDIO WIFI模组的接口。这个改造特别适合那些需要灵活接入不同WIFI模组的开发者&#xff0c;比如我在做智能家居网关开发时&…...

R语言新手必看:clusterProfiler功能富集分析从安装到实战(附常见报错解决方案)

R语言实战&#xff1a;clusterProfiler功能富集分析全流程指南 第一次接触功能富集分析时&#xff0c;我被那些密密麻麻的基因列表和复杂的生物学术语搞得晕头转向。直到发现了clusterProfiler这个神器&#xff0c;它就像生物信息学分析中的瑞士军刀&#xff0c;把复杂的富集过…...

STM32F103 LoRa物理层驱动库详解与工程实践

1. 项目概述LoRa_STM32 是一个面向 STM32F103CB 微控制器平台的 LoRa 通信库&#xff0c;本质是 sandeepmistry/arduino-LoRa 库在 STM32 平台上的适配分支。它并非独立开发的全新协议栈&#xff0c;而是通过 Arduino Core for STM32&#xff08;rogerclarkmelbourne/Arduino_S…...

AI小白进阶必看!吴恩达教你用“职业技能包“让AI像专业员工一样工作(收藏版)

本文系统拆解了吴恩达联合Anthropic推出的Agent Skills视频课程&#xff0c;深入浅出地讲解了如何通过构建"职业技能包"&#xff08;Skills&#xff09;&#xff0c;让通用AI Agent在具体业务场景中像专业员工一样可靠工作。文章从Agent Skills的定义、必要性、能力维…...

【GitHub 加速计划】:解决智能家居插件获取难题的网络适配方案

【GitHub 加速计划】&#xff1a;解决智能家居插件获取难题的网络适配方案 【免费下载链接】integration 项目地址: https://gitcode.com/gh_mirrors/int/integration 在智能家居系统搭建过程中&#xff0c;插件获取往往是用户面临的首要障碍。许多优质的智能家居插件托…...