问题 是否有C ++跨平台USB库?


我(将要)在Qt中编写一个将在3个主要操作系统(Windows,Linux和Mac)上运行的应用程序。这个应用程序的一个功能是它需要USB与一个自定义外部硬件通信。是否有可用的跨平台USB库?


1747
2017-10-12 16:51


起源

自定义硬件是通过USB说HID还是直接使用串行线路? - nmichaels
可能是一个串行链接。它是一个ATMega USB芯片,带有LUFA USB库,它支持两者,但串行链接可能是最可能的选择。 - Bojangles
啊,但是在Windows上,你可以找到十几个为$$$的第三方库;-)
@pst ONLY $$$?太好了!这是非常有价值的!我将不得不买一些这些!等等......; P. - Bojangles


答案:


尝试 libusb的

支持的操作系统:Linux,   FreeBSD,NetBSD,OpenBSD,Darwin,   MacOS X(和Windows,通过   libusb-win32项目)。

但你应该注意它的用途 libusb0.sys Windows上的内核模式驱动程序,未通过WHQL认证,可能是64位Windows 7和Windows Server 2008 R2中的问题。 对不起,版本1.2.0.0 libusb0.sys  是数字签名


9
2017-10-12 17:06



谢谢!只是我需要的信息。 - Bojangles
使用libusb-win32的问题在于它是libusb-0.1的一个端口,它与libusb-1.0不兼容。但是libusb-1.0现在似乎本身就支持Windows。 - trojanfoe
Libusb近年来变得越来越好:你现在可以在Windows上使用它与具有WinUSB作为驱动程序的设备进行通信,因此你不必像第三方那样运行任何内核模式代码 libusb0.sys。 - David Grayson
不幸的是,libusb对Windows上的复合设备的支持基本上是不存在的。 - shogged


我想更新这篇帖子给那些现在回来的人......

Libusb(版本0.1)已被弃用。现代标准是使用libusb-1.0或libusbx。

就个人而言,我认为有很多理由可以使用 libusbx。它是由沮丧的libusb-0.1开发人员编写的,他们想要更频繁的更新周期和更好的bug维护系统。

我建议libusbx的原因如下:

  • 不需要sudo访问权限
  • 通过阅读收到的消息,我开箱即用
  • 更好地支持和更频繁地响应错误/问题
  • 发送/接收消息的异步和同步支持

当然,libusb-1.0确实支持异步/同步报告......但libusbx背后的理念更具吸引力,文档更好。

所以这完全取决于你,如果你或谁还想更多地了解这些库,那么历史很容易在网上找到。你也可以看到 这个 关于直接主题的更多信息的堆栈问题。


4
2017-07-26 17:43



截至2014年2月,实际上只有 libusb的 剩余。 linusbx主页有以下注释:libusbx是一个分支 libusb的,一个提供USB设备通用访问的库。截至2014.01.26,该项目已全部合并为 libusb的 并且正在停止。由于不会再发布libusbx,因此强烈建议您切换到使用 libusb的。 - user23573
Libusbx不再维护。您应该使用libusb。 - neo