Unknown module(s) in QT: mqtt

以上问题只是个引子,我遇到的问题是mqtt库无法通过QT += mqtt方式使用。于是编译器给出以上提示。以下描述解决办法。

我的编译环境

操作系统 windows10 版本1909
QT 安装包版本:5.12.9
QT 安装位置:C:\Qt\Qt5.12.9\Examples\Qt-5.12.9
QT 编译工具链:Desktop_Qt_5_12_9_MSVC2017_64bit
mqtt 源代码:来自github,注意选择与QT安装包一致的版本。 下载链接
mqtt 源码本地位置:d:/qtest/

mqtt库编译结果

  1. 双击qtmqtt.pro,打开工程;
  2. 构建工程,目录(build-qtmqtt-Desktop_Qt_5_12_9_MSVC2017_64bit-Debug\bin)下生成Qt5Mqtt.dll和Qt5Mqttd.dll,分别对应发行版(release)和调试版(debug)。
  3. 目录build-qtmqtt-Desktop_Qt_5_12_9_MSVC2017_64bit-Debug\lib下生成Qt5Mqtt.lib和.prl,以及Qt5Mqttd.lib和prl文件。

示例编译结果

  1. 按照QT官方规范,把示例代码(D:\qtest\qtmqtt-5.12.9\examples)mqtt整个目录copy至QT安装目录(C:\Qt\Qt5.12.9\Examples\Qt-5.12.9)。
  2. copy完成后,双击示例工程文件mqtt.pro,打开示例工程。
  3. 构建设置中选择MSVC2017_64bit(我本地的工具链)。
  4. 实施构建动作。

出现的问题及解决办法

  1. 问题1:找不到库文件Qt5Mqttd.lib。编译输出:-1: error: dependent ‘C:\Qt\Qt5.12.9\5.12.9\msvc2017_64\lib\Qt5Mqttd.lib’ does not exist.
    解决办法:把编译好的对应库copy到错误提示中标明的位置,再次编译。
  2. 问题2:头文件不存在。编译输出:error: dependent ‘5.12.9\msvc2017_64\include\QtMqtt\QMqttClient’ does not exist.
    解决办法:以QMqttClient不存在为例。需要复制mqtt源码中的对应头文件到"QT安装目录\5.12.9\msvc2017_64\include\QtMqtt",同时增加QMqttClient文件,文件内容很简单:#include “qmqttclient.h”。举一反三处理所有类似问题。
  3. 问题3:不知道QT中的mqtt库。编译输出: error: Unknown module(s) in QT: mqtt
    解决办法:在mqtt编译输出的目录中找到目录:mkspecs\modules-inst,并复制两个pri文件到目录C:\Qt\Qt5.12.9\5.12.9\msvc2017_64\mkspecs\modules,再次编译不在出现错误。
    总结
    一、库版本和位置是否放置在相应编译工具链目录下。
    二、头文件是否对应到类名文件,并放置到编译工具链目录下。
    三、modules-inst下的pri文件是否放置到编译工具链目录的相应目录下, QT +=mqtt 能否正常工作都依赖目录里的pri文件。

成果

示例代码中的simpleclient.exe运行结果。
simpleclient运行效果

没有更多了(完)

桃花坞里桃花庵,桃花庵里桃花仙;
桃花仙人种桃树,又摘桃花卖酒钱。唐寅-明

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐