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

news2024/11/19 9:23:53

交叉编译工具链的安装及带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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2136150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【资料分析】平均倍数类

平均 观察选项,差距较大,大胆约分即可 很少的情况下,选项相差很近不能随便约分 倍数 第N次注意增长率是否为下降! 问的是基期倍数比哦 平均增长量 十三五这种明确问法,一定是五年 属于有往前推的A和不往前推的…

智能智造和工业软件研发平台SCSAI功能介绍

用爱编程30年,倾心打造工业和智能智造软件研发平台SCIOT,用创新的方案、大幅的让利和极致的营销,致力于为10000家的中小企业实现数字化转型,打造数字化企业和智能工厂,点击上边蓝色字体,关注“AI智造AI编程”或文末扫码…

掌握Transformer之深入多头注意力机制

01 引言 这是我关于Transformer系列的第三篇文章。在在前两篇文章中,我们了解了什么是Transformer、Transformer的架构以及其各组件的工作原理。在本文中,我们将进一步深入探讨多头注意力机制,它是Transformer的大脑。 闲话少说&#xff0…

每天五分钟玩转深度学习PyTorch:模型参数优化器torch.optim

本文重点 在机器学习或者深度学习中,我们需要通过修改参数使得损失函数最小化(或最大化),优化算法就是一种调整模型参数更新的策略。在pytorch中定义了优化器optim,我们可以使用它调用封装好的优化算法,然后传递给它神经网络模型参数,就可以对模型进行优化。本文是学习第…

福建聚鼎科技:装饰画怎么运营更受大家喜欢

在繁华喧嚣的都市中,装饰画宛如一首无言的诗篇,静静地诉说着生活的美好。如何让这门艺术走进千家万户,成为装点空间、启迪心灵的一抹亮色?今天,我们就来探寻装饰画运营的秘诀,让它在市场的海洋中乘风破浪。 一幅优秀的…

Python+Pytest框架,“conftest.py文件编写如何获取token和获取日志“?

1、新增"conftest.py" import pytest import loggingfrom api_keyword.api_key import ApiKey from config import *# 获取token # 1. 正常的请求对应的接口并且提取数据 # 2. pytest.fixture()测试夹具(测试前置、后置操作)pytest.fixture(s…

黑神话悟空+云技术,游戏新体验!

近期,一款名为黑神话悟空的游戏因其独特的艺术风格和创新的技术实现在玩家中产生了不小的影响。 而云桌面技术作为一种新兴的解决方案,正在改变人们的游戏体验方式,使得高性能游戏可以在更多设备上流畅运行。 那么,黑神话悟空如…

大数据安全需求分析与安全保护工程

大数据安全威胁与需求分析 特征:海量是数据规模、快速的数据流转、多样的数据类型和价值密度低 种类和来源:结构化、半结构化和非结构化数据 数据种类: 结构化数据:关系模型数据,以关系数据库表形式管理的数据 非…

【FATFS】FATFS简介及下载

1、FATFS简介 FatFs 是一个针对嵌入式系统开发的通用文件系统模块,主要用于支持 FAT 文件系统。它最初由 ChaN 开发,并被广泛应用于嵌入式设备上。FatFs 以其轻量级、可配置和设备无关的特性著称,支持 FAT12、FAT16、FAT32 以及 exFAT 文件系…

还有人认为C++容器是线程安全的吗?

C标准库中的容器(如std::vector, std::list, std::map等)本身不是线程安全的、不是线程安全的、不是线程安全的,重要的事情讲三遍。这意味着如果你在多线程环境中同时访问(读或写)同一个容器实例,而没有进行…

力扣14.最长公共前缀

思路:将字符串数组中第一个字符串用作参考; 8.将他的长度作为范围,因为超范围了之后就不会再有公共前缀了 9.将字符串数组的长度也作为范围,意思是便利字符串数组中的字符串 11.开始第一层循环,依次遍历第一个字符串的…

Python代码:作为程序员这22个Python单行代码,你还不知道吗?

每个程序员都必须知道的22个Python单行代码是一个相对主观的列表,因为不同的程序员可能会根据自己的经验和需求来定义哪些代码是“必须知道”的。不过,我可以根据Python的常用性和实用性,为你提供一系列非常有用且简洁的Python单行代码及其源…

51单片机 - DS18B20实验1-读取温度

上来一张图,明确思路,程序整体裤架如下,通过单总线,单独封装一个.c文件用于单总线的操作,其实,我们可以把点c文件看成一个类操作,其属性就是我们面向对象的函数,也叫方法&#xff0c…

Linux echo,printf 命令

参考资料 【Linux】ハイフンをいっぱい出したかっただけなのに【printfコマンド】 目录 一. echo命令1.1 -n 选项1.2 -e 选项1.3 配合扩展实现批量换行输出1.3.1 xargs -n 11.3.2 tr \n1.3.3 xargs printf "%s\n"1.4 ANSI转义序列1.5 彩色文本输出 二. printf 命令…

Centos7安装gitlab-ce(rpm安装方式)

本章教程,主要介绍如何在Centos7安装gitlab-ce。 一、安装基础环境 安装gitlab-ce之前,我们需要安装一下jdk版本。 sudo yum install java-11-openjdk-devel二、下载安装包 这里我们下载的是rpm包。更多gitlab-ce版本可以在这里查看:https://…

果蔬识别系统架构+流程图

相关文章和代码 果蔬识别系统 果蔬识别系统优化(1~5) 架构图 流程图 初始化 识别流程 学习流程 同步流程 与初始化类似,只是同步只同步一个storeCode数据 删除数据流程 导入数据

无人机几种常见的避障系统!!!

1. 视觉避障系统 工作原理: 视觉避障系统通过安装在无人机上的摄像头捕捉周围环境的图像,利用计算机视觉技术对图像进行处理和分析,提取出障碍物的信息。 通过对障碍物的识别和分类,无人机可以判断出障碍物的性质和危险程度&am…

AI 时代程序员的挑战与机遇

你好,我是看山。 在当今数字化快速发展的时代,AIGC(如 ChatGPT、Midjourney、Claude 等)大语言模型如雨后春笋般接二连三的涌现,与此同时,AI 辅助编程工具也日益普及。 这一系列的变化使得程序员的工作方…

pdf文件怎么转换成ppt?介绍几种pdf转ppt的方法

pdf文件怎么转换成ppt?将pdf文件转换成ppt格式是一种常见且实用的需求,特别是在制作演示文稿和准备报告时。pdf格式因其文件内容的固定排版和高兼容性而广泛应用于文档的保存和分享。然而,在某些情况下,将pdf文件转换为ppt格式可以…

拒绝千篇一律,AI帮你定制独一无二的个人写真

每个女人都渴望展现最美的自己,你是否厌倦了拍出千篇一律的照片?今天,我要告诉你一个秘密,用简单三步,即可打造属于你的独一无二个人写真!文生图、蒙版换脸、图生图,三步化身超级模特&#xff0…