首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtBlueTooth在Linux上没有功能

QtBlueTooth在Linux上没有功能
EN

Stack Overflow用户
提问于 2016-12-01 02:30:07
回答 2查看 3K关注 0票数 0

我正在开发一个使用QT5.7启用蓝牙LE功能的嵌入式应用程序。我正在开发的设备是作为外围角色,它可以广播广告包,让智能手机连接。

目标板在Ubuntu 14.04中运行,使用的是bluez版本5.43 (最新版本),因为Qt文档说:“在Qt5.7中,支持外围角色的附加API被添加为一个技术预览,后端只为Linux /BlueZ实现。”所以,我认为Qt蓝牙API正是我所需要的。

但是当我构建和运行Qt蓝牙示例(BlueTooth低能心率服务器示例和蓝牙扫描示例)时,它们都没有工作。我只能得到控制台输出:"qt.bluetooth:虚拟后端运行。Qt蓝牙模块是无功能的。“

我在googled上搜索了这条错误消息,似乎很多开发人员都收到了错误消息,因为他们在Windows平台上使用Qt蓝牙API,而qt蓝牙api不支持windows。但是我使用的是Ubuntu,所以很明显出了点问题,但我不知道到底是什么引起了这个问题。

我想做的是:

  1. 启用QtBluetooth日志记录。但没有比这更有趣的信息了。
  2. 不要使用任何Qt蓝牙API,只需使用命令行工具hc共图和hcitool手动设置广告操作。而且它真的很管用!我的iPhone可以“看到”设备,我可以连接到它!

基于我正在尝试的,我认为我的硬件是可以的,蓝牙芯片可以工作,但我真的需要QtBluetooth API才能正确工作。也许我错过了什么重要的事?布鲁兹需要一些配置吗?请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-06 03:12:41

好吧,我终于解决了这个问题。Qt在按源构建Qt时具有一些特性测试功能。如果没有在主机上安装一些开发包,则测试将失败,该函数将无法正常工作。在本例中,qt将使用虚拟后端,因此示例应用程序仍然可以编译OK并运行,但不需要任何实际使用。

说到qt蓝牙,所需的开发包是lib蓝牙-dev-dev蓝牙蓝牙-dev libusb-dev libdbus-1-dev bluez hcidump bluez-tools (我列出了比需要更多的安装,以防万一),确保在之前在主机上安装所有这些设备。

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

代码语言:javascript
复制
#!/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可执行文件,然后可以通过执行测试qt蓝牙函数:

代码语言:javascript
复制
qtSourcePath/qtbase/bin/qmake qtSourcePath/qtconnectivity/qtconnectivity.pro   

如果你看到这样的事情:

代码语言:javascript
复制
Checking for bluez... yes
Checking for bluez_le... yes
Checking for linux_crypto_api... yes

那么你就好了,只需为整个Qt源代码制作&& make,qt蓝牙就可以正常工作了。

编辑:

如果你无论如何都不能通过蓝牙测试(当你需要交叉编译的时候,就像我的情况一样),我想出了一个解决办法。您仍然需要在make之前安装所有必需的开发包,这一次为了通过蓝牙功能测试,您可以使用您的系统内置qmake (apt-获取安装qt5-qmake,而不是运行配置脚本生成的qmake )来使用qtconnectivity.pro。这样,您就可以通过蓝牙函数测试并为for连接模块生成Makefile。

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

代码语言:javascript
复制
- QMAKE = /usr/lib/x86_64-linux-gnu/qt5/bin/qmake
+ QMAKE = /opt/qt-everywhere-opensource-src-5.7.0/qtbase/bin/qmake 

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

我已经测试了解决办法,示例应用程序(heartRate服务器)现在可以正常工作了。恼人的消息"qt.bluetooth:虚拟后端运行. Qt蓝牙模块不起作用“已经消失:)

票数 0
EN

Stack Overflow用户

发布于 2018-03-13 12:31:11

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

Qt.bluetooth:虚拟后端运行。Qt蓝牙模块没有功能。

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

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

当我从带有所有库的设备中下载必要的文件夹并包含并使用它作为-sysroot参数时,我的问题就解决了。测试成功通过,不需要使用@colin建议的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40901662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档