首页 > 编程语言 >libusb系列-007-Qt下使用libusb1.0.26源码

libusb系列-007-Qt下使用libusb1.0.26源码

时间:2022-11-20 15:34:34浏览次数:54  
标签:26 Qt 错误 如下 编译 libusb 源码


libusb系列-007-Qt下使用libusb1.0.26源码_libusb

libusb系列-007-Qt下使用libusb1.0.26源码

文章目录

  • ​​libusb系列-007-Qt下使用libusb1.0.26源码​​
  • ​​摘要​​
  • ​​安装编译环境​​
  • ​​确认需要的文件​​
  • ​​开始编译​​
  • ​​错误1:找不到文件​​
  • ​​错误2:expected​​
  • ​​错误3:SCM_CREDENTALS​​
  • ​​错误4:类型冲突​​
  • ​​错误5 assert断言错误​​
  • ​​错误6:关于时间的错误​​
  • ​​测试libusb​​
  • ​​工程源码​​


关键字:

​Debian​​、

​Linux​​、

​Qt​​、

​libusb​​、

​源码​

内容背景:

最近项目终于切到Linux下开发了,所以最近的记录都是发生在​​Debian 10​​​ 以及​​Arm Debain 10​​​ 下,​​Qt​​​版本​​5.12.3​​。这几天真是问题多多,收获满满,不过目前阶段仅仅停留在解决问题,至于原理性的东西,还得慢慢消化。最近好多问题都是直接群里问大神,感谢各位大神助我成长。

开始本来USB传世使用的是HIDUSB,后面计划开发一个专用的驱动,到最后,因为最终系统一直定不下来,最终成了使用libusb了。大部分人都是直接使用libusb 的库的,把源码直接放在项目中参与编译的应该很好,哎,我就是那个大冤种,那么请跟随我一起看我如何给自己完坑踩坑吧。

摘要

哎呀,终于轮到我写我踩的大坑了。这里要贴出我领悟到的重大人声哲理。

其实,所谓的困难,都是我们自己。

其实我最开始接触​​libusb​​​的时候,就有把​​libusb​​​源码搞进项目里的想法,因为前面使用​​QCustomPlot库​​​ ​​CJSON库``HUDUSB库​​​都是直接包含一个头文件和一个源码即可完成源码的引入,那么到​​libusb​​​库的时候,我就有了同样的想法了,但是当我打开​​libusb​​​库的源码包是,是直接闷逼的状态,所以当场就点击了右上角的​​X​

第二次是尝试编译lib库,结果还是一地鸡毛,找了好几个教程,都是没有成功,所以再次点击右上角的​​X​

第三次,尝试直接把源码放在Qt里面编译,不错所料,好几百个错误,又一次点击右上角​​X​

第四次,准备好好研究一番再搞。终于算是成功了吧,1.0.9 顺利整合到源码中,1.0.26 在Demo里面测试可以了初始化USB了,不过我注视掉了部分时间相关的函数,应该会有部分问题,应该还是少了那个库所致,暂时只能到这里,因为我项目中原来使用的库就是1.0.9 所以这源码也是1.0.9 的,保持下一致性。

安装编译环境

这个环节看是很数次,其实就是在第三篇文章​​libusb系列-003-Linux下libusb源码编译​​的一部分,因为我们需要通过make 知道linux,需要那些源码。所以需要安装编译环境

sudo apt install -y make dh-autoreconf
sudo apt install -y libudev-dev

确认需要的文件

这里就要切到​​libusb系列-003-Linux下libusb源码编译​​,找一张图一下都需要什么文件。

libusb系列-007-Qt下使用libusb1.0.26源码_Debian_02

按照上面的内容,把需要的源码文件添加到Qt工程中。

libusb系列-007-Qt下使用libusb1.0.26源码_源码_03

开始编译

接着按照理想的进度,应该是我们点击Qt Creator中的Buil按键,等待绿条走完,就可以了大功告成了,

错误1:找不到文件

命名已经包含了,结果还是找不到文件如下图所示

libusb系列-007-Qt下使用libusb1.0.26源码_libusb_04

这个问题其实还是很好解决的,改下包含路径即可。这个步骤需要循环操作好多次,直到没有了对应的报错。

错误2:expected

额,这个错误我也不知道该怎么形容,反正就是好导出宏有关系。如下图所示

libusb系列-007-Qt下使用libusb1.0.26源码_libusb_05

因为我们要直接使用源码,没有导出一说了,所以我就把导出宏删除了,这个也要循环操作好多轮,直到没有再说。

错误3:SCM_CREDENTALS

说是这个宏没有定义 SCM_CREDENTALS

libusb系列-007-Qt下使用libusb1.0.26源码_Debian_06

这个就要找对应的宏定义,一路找上去,最后会发下如下图所示的定义,所以只需要在对应的宏使用的地方增加一个宏 ​​__USE_GNU_​

libusb系列-007-Qt下使用libusb1.0.26源码_linux_07

libusb系列-007-Qt下使用libusb1.0.26源码_Qt_08

百度也有其他的方法,我测试不好使,上面是我测试好使的,可能和系统有关。百度内容如下

libusb系列-007-Qt下使用libusb1.0.26源码_源码_09

错误4:类型冲突

这个是翻译过来的,这个问题我到现在其实也没有解决,只是我把对应的实现给注释掉了,具体影响未知,也期待大佬评论区指点一波

报错内容如下

libusb系列-007-Qt下使用libusb1.0.26源码_源码_10

找遍整个项目,也只有3个地方出现,不存在冲突呀

libusb系列-007-Qt下使用libusb1.0.26源码_Qt_11

解决这个问题,也尝试过加 ​​extern "C"​​,但是无解,报错依旧

libusb系列-007-Qt下使用libusb1.0.26源码_源码_12

错误5 assert断言错误

这个更是找不到解决方法,报错如下,都断言错误。

libusb系列-007-Qt下使用libusb1.0.26源码_libusb_13

字面意思都是未定义,但是我真的可以向上找到定义。

libusb系列-007-Qt下使用libusb1.0.26源码_libusb_14

所以,我理解的断言就是类似抛出异常被,所以我就不抛出了,直接注释掉。如下图所示

libusb系列-007-Qt下使用libusb1.0.26源码_Qt_15

错误6:关于时间的错误

这个同样,我的解决方法就是注释掉使用的地方,这个应该是我没有引用到那个系统的库,应为我跳到对应的函数接口,注释都是写着如果系统不提供,就自己实现他。所以我就注释掉了,但是其实应该是有一个库可以提供这些代码的,示例如下

libusb系列-007-Qt下使用libusb1.0.26源码_Qt_16

也是一样,循环操作,直到没有报错,如果到这里,你都解决完了,那么应该就是可以编译过了。

测试libusb

测试代码如下,其实也是就一行

libusb系列-007-Qt下使用libusb1.0.26源码_libusb_17

qDebug() << libusb_init(NULL);

测试结果如下

libusb系列-007-Qt下使用libusb1.0.26源码_Debian_18

工程源码

​​Debian 10 下 Qt 5.12.3 使用libusb 1.0.26源码工程示例 ​​

那么我注释掉这些东西,不知道对整个库是否有印象,所以还希望大佬们在评论区指正呀。


libusb系列-007-Qt下使用libusb1.0.26源码_libusb_19


标签:26,Qt,错误,如下,编译,libusb,源码
From: https://blog.51cto.com/DreamLife/5871523

相关文章

  • Qt基础之四:Qt信号与槽机制原理及优缺点
    信号和插槽用于对象之间的通信。信号和槽机制是Qt的核心特性,可能也是与其他框架提供的特性最大不同的部分。Qt的元对象系统使信号和槽成为可能。一.简介在GUI编程中,当我们改......
  • 026.MyBatis批处理
    1.goods.xml<!--INSERTINTOtable--><!--VALUES("a","a1","a2"),("b","b1","b2"),(....)--><insertid="batchInsert"parameterType="java.util.List">......
  • Qt编写监控Onvif综合示例(支持云台/预置位/抓图/事件订阅等)
    一、功能特点广播搜索设备,支持IPC和NVR,依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Pro......
  • 使用Gradle编译Spring源码
    最近想研究下spring的源码,决定先把源码跑起来,在此记录一下本次遇到的问题。本次使用的工具有:git、IDEA2021社区版、jdk17、gradle7.5.1从BuildfromSource得知,需要git和......
  • 最完美WIN11_Pro_22H2.22622.898软件选装纯净版VIP37.5
    【系统简介】=============================================================1.本次更新母盘来UUP WIN11_Pro_22H2.22621.898,添加升级补丁至22622.898。2.不支持更新,更新......
  • Seata 1.5.2 源码学习(Client端)
    在上一篇中通过阅读Seata服务端的代码,我们了解到TC是如何处理来自客户端的请求的,今天这一篇一起来了解一下客户端是如何处理TC发过来的请求的。要想搞清楚这一点,还得从Globa......
  • Qt基础之九:子线程和GUI交互
    首先要强调的是,子线程是不能直接操作GUI的,关于原因,详见:​​C++面试题之为什么不能多线程直接操作GUI状态​​ Qt提供了三种方式来实现异步操作GUI1.postEvent2.信号和......
  • 2022-2023-1 20221326《计算机基础与程序设计》第十二周学习总结
    班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12作业正文:https://www.cnblogs.com/Sandy......
  • chrome浏览器 开发者工具F12中某网站的sources下的源码如何批量保存
    1.常用保存Sources源码的两种方法1.1单个文件直接右键另存为1.2单个页面保存网页,就会把引用到的所有文件下载下来如果页面很多,文件也很多,静态资源也很多,那么得一个一个去......
  • QT入门之创建新窗口
    1.在QT里面新建1个工程,命名01QT,先生成个空的项目。 2 新建1个源文件C++Source文件,命名main.cpp.main 方法里面这样写//主应用程序QApplicationapp(argc,argv);......