QtBlueTooth 在 Linux 上无法运行

QtBlueTooth not functional on Linux

我正在开发一个使用 Qt 5.7 启用蓝牙 LE 功能的嵌入式应用程序。我正在开发的设备旨在充当外围角色,它可以广播广告包并让智能手机连接。

目标板是 运行 Ubuntu Linux 14.04, bluez 版本 5.43 (最新) 由于 Qt 文档说 "In Qt 5.7, additional API supporting the peripheral role was added as a Technology Preview, with the backend only implemented for Linux/BlueZ." 所以,我认为 Qt 蓝牙API正是我需要的。

但是当我构建和 运行 Qt 蓝牙示例(蓝牙低功耗心率服务器示例和蓝牙扫描仪示例)时,none 其中的示例正在运行。我只能获得控制台输出:“qt.bluetooth:虚拟后端 运行ning。Qt 蓝牙模块无法正常工作。”

我用谷歌搜索了那个错误信息,似乎很多开发者收到那个错误信息是因为他们在 windows 平台上使用 Qt 蓝牙 API,而 qt 蓝牙 api 不支持 Windows。但是我正在使用 Ubuntu Linux,所以很明显有问题,但我不知道到底是什么导致了这个问题。

我在尝试什么:

  1. 启用 QtBluetooth 日志记录。但没有比这更有趣的消息了。
  2. 不要使用任何 Qt 蓝牙 API,只需使用命令行工具 hciconfig 和 hcitool 手动设置广告操作。它确实有效!我的 iPhone 可以 "see" 设备,我可以连接到它!

根据我的尝试,我认为我的硬件还可以,蓝牙芯片可以工作,但我确实需要 QtBluetooth API 才能正常工作。也许我错过了一些重要的事情? bluez 需要一些配置吗?请帮忙。

好的,我终于设法解决了这个问题。当您通过源代码构建 Qt 时,它具有一些特性测试功能。如果主机上没有安装一些开发包,会导致测试失败,功能无法正常使用。在这种情况下,qt 将改用虚拟后端,因此示例应用程序仍然可以正常编译 运行,但没有任何实际用途。

说到 qt 蓝牙,所需的开发包是 libbluetooth-dev bluetooth blueman bluez libusb-dev libdbus-1-dev bluez-hcidump bluez-tools(我列出了比需要更多的安装,以防万一), 确保在主机上安装所有这些 BEFORE make.

完成所有准备工作后,我 运行 配置脚本为 Qt 生成 Makefile。这是我使用的配置脚本:

#!/bin/sh
./configure \
-v \
-prefix /opt/qt-5.7.0 \
-release \
-opensource \
-xplatform linux-arm-gnueabi-g++ \    # yes, I need to cross-compile
-qt-sql-sqlite \
-qt-zlib \
-qt-pcre \
-no-opengl \
-no-sse2 \
-no-openssl \
-qt-freetype \
-nomake examples \
-nomake tests \
-no-separate-debug-info \
-no-qml-debug \
-pkg-config \
-confirm-license    

在运行配置脚本后,你会在yourQtSourcePath/qtbase/bin/下得到一个qmake可执行文件,然后你可以通过执行来测试你的qtbluetooth功能:

qtSourcePath/qtbase/bin/qmake qtSourcePath/qtconnectivity/qtconnectivity.pro   

如果您看到类似这样的内容:

Checking for bluez... yes
Checking for bluez_le... yes
Checking for linux_crypto_api... yes

那你就可以开始了,只需对整个Qt源进行&&安装,qt蓝牙现在可以正常工作了。

编辑:

如果无论如何你不能通过蓝牙测试(当你需要交叉编译时很有可能,就像我的情况),我已经找到了一个解决方法。在make之前你仍然需要安装所有需要的dev-packages,这个时候为了通过蓝牙功能测试,你可以使用你系统内置的qmake (apt-get install qt5-qmake, NOT 由 运行 宁配置脚本生成的 qmake)与 qtconnectivity.pro 一起工作。这样就可以通过蓝牙功能测试,生成qtconnectivity模块的Makefile。

修改Makefile,更改QMAKE参数。就我而言,这是结果:

- QMAKE = /usr/lib/x86_64-linux-gnu/qt5/bin/qmake
+ QMAKE = /opt/qt-everywhere-opensource-src-5.7.0/qtbase/bin/qmake 

然后,你可以通过make && make install交叉编译整个Qt源码。

我已经测试了解决方法,示例应用程序(heartRate 服务器)现在可以正常工作。烦人的消息 "qt.bluetooth: Dummy backend running. Qt Bluetooth module is non-functional" 消失了:)

我遇到了同样的问题。 当我尝试为我的硬件交叉编译 Qt 框架时,蓝牙相关库显示相同的日志:

"qt.bluetooth: Dummy backend running. Qt Bluetooth module is non-functional."

在我的案例中,这个问题的根本原因在于 sysroot。它没有蓝牙包含和库。这就是Qt蓝牙测试没通过的原因。

在这种情况下,我建议添加 -v 标志,以便它显示完整的日志,并且您可以检查 Qt 测试失败的确切问题。

当我从设备上下载包含所有库的必要文件夹并将其用作 -sysroot 参数时,我的问题就解决了。测试成功通过,无需使用 .

建议的解决方法