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

带wiringPi库的交叉编译 ---宿主机x86Ubuntu,目标机ARMv8 aarch64(香橙派)

带wiringPi库的交叉编译如何进行

  1. 先交叉编译wiringPi库,编译出的库适合香橙派,这时候交叉编译可执行程序的平台和链接库的格式也是正确的,然后通过-I和-L来指定链接的wiringPi库的头文件和库的位置,但是现在还没有学习过,后面学了补上
  • 此时如果把wiringPi库拿到Ubuntu上进行编译后,直接使用会报错
>   arm-linux-gnueabihf-gcc demo2.c -I -lwiringPi 
> /home/CLC/lessonPI/WiringPi/wiringPi -lwiringPi
> /home/CLC/lessonPI/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
  • 报错原因:因为链接的库的格式不对,是宿主机的平台,查看库的文件格式会发现是x86的平台

2.直接把香橙派上编译好的wiringPi库传到ubuntu中进行使用

(1)将香橙派上的wiringPi库拿到ubuntu上
在这里插入图片描述

(2)给这两个库建立各自的软链接

> ln -s libwiringPi.so.2.46  libwiringPi.so 
> ln -s libwiringPiDev.so.2.46  libwiringPiDev.so

在这里插入图片描述

(3)进行交叉编译,分别给出头文件和库的路径

  • csb.c的源代码,这是香橙派控制超声波模块测距的代码
#include <stdio.h>
#include <sys/time.h>
#include <wiringPi.h>
#include <stdlib.h>
#include <unistd.h>#define Trig 0
#define Echo 1double getDistance()
{double dis;struct timeval start;struct timeval stop;pinMode(Trig, OUTPUT);//设置Trig为输出引脚pinMode(Echo, INPUT);//设置Echo为输入引脚/*让超声波发波*/digitalWrite(Trig ,LOW);usleep(5);digitalWrite(Trig ,HIGH);usleep(10);digitalWrite(Trig ,LOW);while(!digitalRead(Echo));//等待其发送波gettimeofday(&start,NULL);//波发送出去的时候的时间while(digitalRead(Echo));//等待波回来gettimeofday(&stop,NULL);//波回来的时候的时间long diffTime = 1000000*(stop.tv_sec-start.tv_sec)+(stop.tv_usec -start.tv_usec);//计算时间printf("diffTime = %ld\n",diffTime);dis = (double)diffTime/1000000 * 34000 / 2;//计算距离return dis;
}int main()
{double dis;if(wiringPiSetup() == -1){fprintf(stderr,"%s","initWringPi error");exit(-1);}while(1){dis = getDistance();printf("dis = %.2fcm\n",dis);usleep(500000);}return 0;
}
  • 编译
aarch64-linux-gnu-gcc csb.c -I ./wiringOP-master/wiringPi -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt -L ./ -o csb

然后可以成功编译出带wiringpi库的可执行文件
在这里插入图片描述

(4)将可执行的文件传回香橙派中进行运行

  • 先查看一下交叉编译后的可执行文件格式
file csb

在这里插入图片描述

  • 然后运行,结果如下

在这里插入图片描述

http://www.lryc.cn/news/101929.html

相关文章:

  • 数据仓库基础知识
  • M 芯片的 macos 系统安装虚拟机 centos7 网络配置
  • AcWing 3708. 求矩阵的鞍点
  • web前端开发工程师的具体职责范本(合集)
  • 从源程序到可执行文件的四个过程
  • C++部署学习
  • linux下lazarus开发ide里 BGRAControls控件库comboBox示例
  • Redis学习路线(9)—— Redis的场景使用
  • 糟了,数据库主从延迟了!
  • VUE,子组件给父组件传递参数,props 自定义属性,ref
  • 【Oracle系列】- Oracle数据迁移
  • Linux环境安装MySQL(详细教程)
  • 23. Mysql中的排序规则
  • MongoDB 基础学习记录
  • Visual Studio2022报错 无法打开 源 文件 “openssl/conf.h“解决方式
  • 【更新公告】Airtest更新至1.3.0.1版本
  • SQL语句集锦
  • 【多线程中的线程安全问题】线程互斥
  • 抖音seo短视频矩阵系统源代码开发技术分享
  • flutter实战(01)windows桌面版 修改应用logo、名称、显示位置、显示大小
  • 校园基础设施资源管理
  • Github git clone 和 git push 特别慢的解决办法
  • 【计网】TCP在可靠传输中都干了啥
  • windows下载安装FFmpeg
  • SwipeDelMenuLayout失效:Could not find SwipeDelMenuLayout-V1.3.0.jar
  • C++ 类和对象篇(零) 面向过程 和 面向对象
  • 列表list
  • gcc编译出现bar causes a section type conflict with foo问题解决
  • 12. Mybatis 多表查询 动态 SQL
  • 操作系统专栏1-内存管理from 小林coding