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库编译结果
- 双击qtmqtt.pro,打开工程;
- 构建工程,目录(build-qtmqtt-Desktop_Qt_5_12_9_MSVC2017_64bit-Debug\bin)下生成Qt5Mqtt.dll和Qt5Mqttd.dll,分别对应发行版(release)和调试版(debug)。
- 目录build-qtmqtt-Desktop_Qt_5_12_9_MSVC2017_64bit-Debug\lib下生成Qt5Mqtt.lib和.prl,以及Qt5Mqttd.lib和prl文件。
示例编译结果
- 按照QT官方规范,把示例代码(D:\qtest\qtmqtt-5.12.9\examples)mqtt整个目录copy至QT安装目录(C:\Qt\Qt5.12.9\Examples\Qt-5.12.9)。
- copy完成后,双击示例工程文件mqtt.pro,打开示例工程。
- 构建设置中选择MSVC2017_64bit(我本地的工具链)。
- 实施构建动作。
出现的问题及解决办法
- 问题1:找不到库文件Qt5Mqttd.lib。编译输出:-1: error: dependent ‘C:\Qt\Qt5.12.9\5.12.9\msvc2017_64\lib\Qt5Mqttd.lib’ does not exist.
解决办法:把编译好的对应库copy到错误提示中标明的位置,再次编译。 - 问题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:不知道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运行结果。
没有更多了(完)
桃花坞里桃花庵,桃花庵里桃花仙;
桃花仙人种桃树,又摘桃花卖酒钱。唐寅-明