我正在开发一个使用Qt 5.7启用蓝牙LE功能的嵌入式应用程序。我正在开发的设备是作为外围角色,它可以广播广告包并让智能手机连接。
目标板与Ubuntu Linux 14.04一起运行,其中包含bluez版本5.43(最新版本)由于Qt文档说明"在Qt 5.7中,支持外围角色的附加API被添加为技术预览版,只有后端版本为Linux / BlueZ实现。"所以,我认为Qt蓝牙API正是我所需要的。
但是当我构建并运行Qt蓝牙示例(BlueTooth低能量心率服务器示例和蓝牙扫描仪示例)时,它们都没有工作。我只能得到控制台输出:" qt.bluetooth:虚拟后端运行。 Qt蓝牙模块无法使用。"
我搜索了该错误消息,似乎很多开发人员都得到了该错误消息,因为他们在Windows平台上使用Qt蓝牙API,而qt bluetooth api不支持Windows。但是我使用的是Ubuntu Linux,显然有些不对劲,但我不知道究竟是什么导致了这个问题。
我正在尝试:
根据我的尝试,我认为我的硬件没问题,蓝牙芯片可以工作,但我真的需要QtBluetooth API才能正常工作。也许我错过了重要的事情? bluez需要一些配置吗?请帮忙。
答案 0 :(得分:0)
好的,最后我设法解决了这个问题。 Qt在按源构建时有一些功能测试功能。如果您没有在主机上安装某些开发包,则测试将失败,并且该功能将无法正常运行。在这种情况下,qt将使用虚拟后端,因此示例应用程序仍然可以编译正常并运行,但没有任何实际用途。
说到qt蓝牙,所需的开发包是libbluetooth-dev bluetooth blueman bluez libusb-dev libdbus-1-dev bluez-hcidump bluez-tools(为了以防万一,我列出了比需要更多的安装),确保在主机上安装所有这些 BEFORE make。
完成所有准备工作后,我运行configure脚本为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脚本后,你将在你的QSSourcePath / 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之前安装所有必需的开发包,这次为了通过蓝牙功能测试,你可以使用你的系统内置qmake(apt-get install qt5-qmake, NOT 通过运行configure脚本生成的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&& amp;交叉编译整个Qt源代码。 make install。
我已经测试了解决方法,示例应用程序(heartRate服务器)现在可以正常工作。烦人的消息“qt.bluetooth:Dummy后端运行.Qt蓝牙模块无法正常运行”消失了:)
答案 1 :(得分:0)
我遇到了同样的问题。 当我试图为我的硬件交叉编译Qt框架时,蓝牙相关的库显示了相同的日志:
“qt.bluetooth:Dummy后端正在运行.Qt蓝牙模块无法正常运行。”
在我的案例中,这个问题的根本原因是在sysroot中。它没有蓝牙包含和库。这就是Qt蓝牙测试无法通过的原因。
在这种情况下,我建议添加-v
标志,以便显示完整的日志,并且您可以检查Qt测试失败的确切问题。
当我从包含所有库的设备下载必要的文件夹并将其用作-sysroot
参数时,我的问题就解决了。测试成功通过,无需使用@colin建议的解决方法。