好的,我终于设法解决了这个问题。 Qt 有一些特性测试功能,当你通过源代码构建它时。如果主机上没有安装一些开发包,会导致测试失败,功能无法正常工作。在这种情况下,qt 将使用虚拟后端,因此示例应用程序仍然可以编译并运行,但没有任何实际用途。
说到 qt 蓝牙,所需的开发包是 libbluetooth-dev bluetooth blueman bluez libusb-dev libdbus-1-dev bluez-hcidump bluez-tools(我列出了比需要更多的安装,以防万一),确保在 BEFORE 制作之前将所有这些安装在主机上。
完成所有准备工作后,我运行配置脚本为 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
运行configure脚本后,你会在你的QtSourcePath/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 源代码 make && make install,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”消失了:)