有没有一个跨平台的C++ USB库?

13

我将在Qt中编写一个应用程序,该应用程序将在三个主要操作系统(Windows、Linux和Mac)上运行。这个应用程序的一个特点是需要使用USB与一块定制的外部硬件进行通信。是否有跨平台的USB库可用?


定制硬件是通过 USB 还是直接使用串行线路进行 HID 通信的? - nmichaels
可能是一个串行连接。它是一个带有LUFA USB库的ATMega USB芯片,该库支持两种方式,但串行连接可能是最有可能的选项。 - Bojangles
啊,但在Windows上,你可以找到十几个第三方库来$$$;-) - user166390
@pst 只要 $$$?太好了!这是非常划算的价值!我得立刻买一些!等等... ;P - Bojangles
2个回答

10

尝试使用libusb

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

但需要注意的是,在Windows上它使用的是libusb0.sys内核模式驱动程序,该驱动程序未经WHQL认证,可能在64位Windows 7和Windows Server 2008 R2中存在问题。 对不起,版本1.2.0.0的libusb0.sys已经进行了数字签名。(链接)


谢谢!这正是我需要的信息。 - Bojangles
1
使用libusb-win32的问题在于它是libusb-0.1的一个移植版本,与libusb-1.0不兼容。然而,现在看来libusb-1.0已经原生支持Windows了。 - trojanfoe
1
Libusb在最近几年变得更好了:现在你可以在Windows上使用它来与使用WinUSB作为驱动程序的设备通信,因此你不必运行任何第三方内核模式代码,如libusb0.sys - David Grayson
不幸的是,libusb在Windows上对复合设备的支持基本上不存在。 - shogged

5

我想为那些现在回来阅读这篇文章的人更新一下...

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

个人认为有很多理由使用libusbx。它是由沮丧的libusb-0.1开发者编写的,他们希望有更频繁的更新周期和更好的错误维护系统。

我建议使用libusbx的原因如下:

  • 不需要sudo权限
  • 使用起来对于读取传入信息来说效果更好
  • 更好的支持和更频繁的对于漏洞/问题的响应
  • 支持异步和同步发送/接收消息

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

所以,完全取决于你,如果你或其他人仍然想了解一些有关这些库的更多信息,历史非常容易在网上找到。您还可以查看堆栈问题,获取有关即时主题的更多信息。


4
截至2014年2月,实际上只剩下libusb。linusbx主页有以下评论: libusbx是libusb的分支,提供对USB设备的通用访问库。 自2014年1月26日起,该项目已完全合并回libusb,并将被停止。 由于不会再发布libusbx版本,强烈建议您切换到使用libusb - user23573
Libusbx不再维护。您应该使用libusb代替。 - neo
我建议删除旧的libusbx链接,因为它现在托管了一个不适合工作场所的网站。 - user2219808

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接