编译安装 QtMqtt 的几个问题及解决办法

编译安装 QtMqtt 的几个问题及解决办法

最近一个项目中要用到 MQTT Client 的一些功能。Qt 的发行版还没有包含相关的模块。但是在下面这个 Qt 的官网上已经能找到相关的模块了:

https://codereview.qt-project.org/#/admin/projects/qt/qtmqtt

github 上也能搜到不少相关的代码:

https://github.com/qt/qtmqtt
https://github.com/toni1991/QtMqtt
https://github.com/KurtPattyn/QtMqtt

在这篇博客里,我们使用 https://github.com/qt/qtmqtt 上的代码。这个模块应该算是 Qt 的官方发布的。

首先下载源代码,解压后进入 qtmqtt-dev\ 目录,在这个目录下建个 build 目录,进入 build 目录执行:

qmake ..\qtmqtt.pro
nmake
nmake install

直接编译会报很多错误,我们一个一个来解决。

qmqttauthenticationproperties.h:33: error: C1083: 无法打开包括文件: “QtMqtt/qmqttglobal.h”: No such file or directory

打开 qmqttauthenticationproperties.h 文件,发现有这么两句:

#include <QtMqtt/qmqttglobal.h>
#include <QtMqtt/qmqtttype.h>

在 Qt 的 include 目录下新建一个 QtMqtt 文件夹(注意 x86 和 x64 所在的目录不一样),把 头文件都复制一份到这个目录。

再编译就不报这个错误了。

下一个错误是:qmqttconnection.cpp:169: error: C2039: “errorOccurred”: 不是“QAbstractSocket”的成员

qmqttconnection.cpp 中 168行有这么一句:

connect(socket, &QAbstractSocket::errorOccurred, this, &QMqttConnection::transportError);

就是这句出了问题。查帮助文档或者源代码都可以发现 QAbstractSocket 没有 errorOccurred 这个 信号。有的那个信号叫:

void error(QAbstractSocket::SocketError socketError)

所以要改写成:

connect(socket, static_cast<void(QAbstractSocket::*)(QAbstractSocket::SocketError)> (&QAbstractSocket::error), 
            this, static_cast<void(QMqttConnection::*)(QAbstractSocket::SocketError)>(&QMqttConnection::transportError) );

再次编译。还有错误:

qmqtttopicname.cpp:148: error: C2039: “KeepEmptyParts”: 不是“Qt”的成员

qmqtttopicname.cpp 148 行代码是这样的:

return d->name.split(QLatin1Char('/'), Qt::KeepEmptyParts);

改写成:

return d->name.split(QLatin1Char('/'), QString::KeepEmptyParts);

再次编译,还有最后一个错误:

qmqtttopicname.cpp:189: error: call to 'qHash' is ambiguous

qmqtttopicname.cpp 189行是:

return qHash(name.d->name, seed);

改为:

return qHash(static_cast<QString>(name.d->name), static_cast<uint>(seed));

类似的还有:

return qHash(filter.d->filter, seed);

改为:

return qHash(static_cast<QString>(filter.d->filter), static_cast<uint>(seed));

至此,编译就没什么问题了。

  • 13
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
### 回答1: 在Linux/ARM下编译安装Qt MQTT库,您可以按照以下步骤进行操作: 1. 首先,确保您已经在ARM架构的Linux系统上安装了必要的编译工具和依赖项,例如GCC、make等。可以通过包管理器或从源代码手动安装它们。 2. 下载Qt MQTT库的源代码,可以从Qt官方网站或其他可靠的资源下载。确保选择与您的Qt版本兼容的源代码。 3. 解压源代码文件,并进入解压后的目录。 4. 打开终端,进入源代码目录,并执行以下命令来生成Makefile: ``` qmake ``` 5. 接下来,使用make命令编译库文件: ``` make ``` 6. 编译过程可能会需要一些时间,具体取决于您的系统性能。请耐心等待编译完成。 7. 完成编译后,可以使用以下命令安装Qt MQTT库到系统中: ``` make install ``` 8. 安装完成后,您可以在系统的Qt库目录中找到MQTT库文件。可以通过以下命令获取库文件的位置: ``` qmake -query QT_INSTALL_LIBS ``` 9. 接下来,您可以在Qt项目中使用MQTT库。在项目的.pro文件中添加以下行: ``` LIBS += -lQt5Mqtt ``` 以上就是在Linux/ARM下编译安装Qt MQTT库的简要步骤。请注意,这只是一般的指导,具体步骤可能会因您所使用的系统和版本而有所差异。请参考Qt官方文档或相关资源获取更详细的信息。 ### 回答2: 在Linux/ARM平台下,编译安装Qt MQTT库的过程如下: 1. 首先,确保系统中已经安装了必要的开发工具链和依赖库。可以使用以下命令安装: ``` sudo apt-get update sudo apt-get install build-essential sudo apt-get install libssl-dev ``` 2. 下载Qt MQTT库的源代码。可以从Qt官方网站的下载页面或Github上的项目页面获取最新的源代码。 3. 解压下载的源代码。可以使用以下命令: ``` tar -xzvf qt-mqtt-xxx.tar.gz cd qt-mqtt-xxx ``` 4. 创建一个用于编译的目录,并进入该目录: ``` mkdir build cd build ``` 5. 配置编译选项。运行以下命令,选择所需的配置选项: ``` qmake .. ``` 你可以在此处添加其他自定义的配置选项。 6. 运行make命令进行编译: ``` make ``` 这将会生成Qt MQTT库的可执行文件。 7. (可选)运行make install命令进行安装。这将会将Qt MQTT库复制到系统目录中,以便其他项目可以使用: ``` sudo make install ``` 如果不想全局安装库,可以跳过此步骤,将生成的库文件手动复制到项目中使用。 完成上述步骤后,你就成功地在Linux/ARM平台下编译安装Qt MQTT库。注意,具体的命令和选项可能会根据你所使用的Linux发行版和版本而有所不同,以上命令仅供参考。 ### 回答3: 在Linux/ARM下编译安装Qt MQTT库,需要按照以下步骤进行: 1. 首先,确保你已经安装Qt开发环境和所需的编译工具链。你可以使用命令行工具或者图形界面工具进行安装。 2. 下载Qt MQTT库的源代码。你可以在Qt的官方网站上找到对应的版本。下载后,解压缩源代码到你的开发环境下的任意目录。 3. 打开终端,进入解压缩后的源代码目录。使用cd命令进行切换目录。 4. 创建一个新的构建目录,并进入该目录。这个目录将用于存储编译生成的文件。可以使用以下命令创建并进入该目录: ``` mkdir build cd build ``` 5. 使用qmake命令生成Makefile文件。执行以下命令: ``` qmake .. ``` 6. 使用make命令进行编译。执行以下命令: ``` make ``` 7. 编译完成后,可以使用make install命令进行安装。执行以下命令: ``` make install ``` 8. 安装完成后,你可以在系统的Qt库目录中找到编译生成的MQTT库文件。其中包括头文件和库文件。 9. 最后,你可以在你的项目中使用Qt MQTT库。在你的项目文件中添加相应的包含路径和链接库即可开始使用。 请注意,以上步骤中涉及到的命令和路径可能需要根据你的具体环境和需求进行调整。此外,确保你已经阅读并理解了Qt MQTT库的编译要求和依赖项,以确保顺利进行编译安装
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值