cmake编译MQTT-C源码

news2024/11/17 2:54:36

Windows端编译MQTT-C源码,获取mqttc库(动态库与静态库),用于集成到Qt工程中使用mqtt订阅与发布功能。

 编译源码与编译出来的mqttc动态库、静态库下载​​​​​​​​​​​​​​https://download.csdn.net/download/qq_38159549/89730367icon-default.png?t=O83Ahttps://download.csdn.net/download/qq_38159549/89730367

编译环境:Windows10 + vs2019

MQTT-C源码:https://github.com/LiamBindle/MQTT-C

参考文章:移植MQTT-C库(附源码)-CSDN博客 、【mqtt】编译使用 MQTT-C-CSDN博客

一、下载MQTT-C源码
git clone https://github.com/LiamBindle/MQTT-C.git

如果遇到git clone Timed out,修改Git的网络设置(https://zhuanlan.zhihu.com/p/636418854)

# 注意修改成自己的IP和端口号
git config --global http.proxy http://127.0.0.1:7890 
git config --global https.proxy http://127.0.0.1:7890
二、修改MQTT-C源码
因为Windows端cmake编译examples报错,所以屏蔽examples部分。

1.屏蔽CMakeLists文件examples部分:

/* 
 * CMakeLists.txt文件 
 */
# 屏蔽EXAMPLES 程序生成
# option(MQTT_C_EXAMPLES "Build MQTT-C examples?" ON)
option(MQTT_C_EXAMPLES "Build MQTT-C examples?" OFF)

2. 屏蔽makefile文件examples部分:

/*
 * makefile文件
 */
all: $(BINDIR) $(MQTT_C_UNITTESTS)

# 取消示例程序生成,只保留库和单元测试
# all: $(BINDIR) $(MQTT_C_UNITTESTS) $(MQTT_C_EXAMPLES)
# bin/simple_%: examples/simple_%.c $(MQTT_C_SOURCES)
# 	$(CC) $(CFLAGS) $^ -lpthread $(MSFLAGS) -o $@
# bin/reconnect_%: examples/reconnect_%.c $(MQTT_C_SOURCES)
# 	$(CC) $(CFLAGS) $^ -lpthread $(MSFLAGS) -o $@
# bin/bio_%: examples/bio_%.c $(MQTT_C_SOURCES)
# 	$(CC) $(CFLAGS) `pkg-config --cflags openssl` -D MQTT_USE_BIO $^ -lpthread $(MSFLAGS) `pkg-config --libs openssl` -o $@
# bin/openssl_%: examples/openssl_%.c $(MQTT_C_SOURCES)
# 	$(CC) $(CFLAGS) `pkg-config --cflags openssl` -D MQTT_USE_BIO $^ -lpthread $(MSFLAGS) `pkg-config --libs openssl` -o $@

 3.同时生成mqttc.dll动态库mqttc.lib静态库,因为MQTT-C CMakeLists源码中只生成了静态库lib,所以需要修改CMakeLists代码,同时生成mqttc.dll动态库mqttc.lib静态库

/*
 * CMakelists.txt文件
 */

# MQTT-C library
# 生成静态库
add_library(mqttc STATIC
    src/mqtt_pal.c
    src/mqtt.c
)
target_include_directories(mqttc PUBLIC include)
target_link_libraries(mqttc PUBLIC 
    $<$<C_COMPILER_ID:MSVC>:ws2_32>
)

# 生成动态库
add_library(mqttc_shared SHARED
    src/mqtt_pal.c
    src/mqtt.c
)
# 将动态库名称修改为 mqttc
set_target_properties(mqttc_shared PROPERTIES OUTPUT_NAME "mqttc") 
target_include_directories(mqttc_shared PUBLIC include)
target_link_libraries(mqttc_shared PUBLIC 
    $<$<C_COMPILER_ID:MSVC>:ws2_32>
)
三、cmake编译源码(Windows )

源码文件夹下打开 Powershell终端

1.使用 cmake 生成 Visual Studio 的项目文件:

cmake -S . -B build -G "Visual Studio 16 2019"


2.然后通过 cmake 构建 Release 版本:

cmake --build build --config Release

运行结果: 

###### 输入命令 cmake -S . -B build -G "Visual Studio 16 2019"

PS F:\Custom-Project\Project-Tra\2024\Mqtt-cmake\cmake-mqtt-c-Test\MQTT-C> cmake -S . -B build -G "Visual Studio 16 2019"
-- Selecting Windows SDK version 10.0.10240.0 to target Windows 10.0.19045.
-- Configuring done (0.0s)
-- Generating done (0.1s)
-- Build files have been written to: F:/Custom-Project/Project-Tra/2024/Mqtt-cmake/cmake-mqtt-c-Test/MQTT-C/build


###### 输入命令 cmake --build build --config Release

PS F:\Custom-Project\Project-Tra\2024\Mqtt-cmake\cmake-mqtt-c-Test\MQTT-C> cmake --build build --config Release
>>
CMake is re-running because F:/Custom-Project/Project-Tra/2024/Mqtt-cmake/cmake-mqtt-c-Test/MQTT-C/build/CMakeFiles/generate.stamp is out-of-date.
  the file 'F:/Custom-Project/Project-Tra/2024/Mqtt-cmake/cmake-mqtt-c-Test/MQTT-C/CMakeLists.txt'
  is newer than 'F:/Custom-Project/Project-Tra/2024/Mqtt-cmake/cmake-mqtt-c-Test/MQTT-C/build/CMakeFiles/generate.stamp.depend'
  result='-1'
-- Selecting Windows SDK version 10.0.10240.0 to target Windows 10.0.19045.
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: F:/Custom-Project/Project-Tra/2024/Mqtt-cmake/cmake-mqtt-c-Test/MQTT-C/build
用于 .NET Framework 的 Microsoft (R) 生成引擎版本 16.11.2+f32259642
版权所有(C) Microsoft Corporation。保留所有权利。

  mqttc.vcxproj -> F:\Custom-Project\Project-Tra\2024\Mqtt-cmake\cmake-mqtt-c-Test\MQTT-C\build\Release\mqttc.lib
  mqttc_shared.vcxproj -> F:\Custom-Project\Project-Tra\2024\Mqtt-cmake\cmake-mqtt-c-Test\MQTT-C\build\Release\mqttc.dll
四、总结

编译完MQTT-C源码,获得mqttc.dll动态库mqttc.lib静态库(位于 ..\MQTT-C\build\Release文件夹下),另外一篇文章演示在Qt工程使用mqttc库,并与mqtt服务器进行数据通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直播怎么录屏?录屏网页的工具有吗?推荐这3款你千万不要错过~

直播与网页录屏&#xff1a;三款必备录屏软件推荐 为什么要记录直播&#xff1f;直播可以捕捉实时发生事件&#xff0c;是真真实实的one take&#xff0c;更重要的是可以记录直播画面中的实时弹幕、评论区的互动&#xff0c;无论是激动人心的体育赛事、教育课程还是互动性强的连…

C++11 14 17 20 23进化史

C11、C14、C17、C20和C23是C语言标准的不同版本&#xff0c;它们之间在功能、特性和语法上存在一些区别。以下是对这些版本主要区别的概述&#xff1a; C11 C11是C语言的一个重要标准&#xff0c;引入了大量新特性和改进&#xff0c;使C变得更加易用和强大。主要特性包括&…

Qt工程使用MQTT-C库与mqtt服务器数据通信

实现mqtt订阅与发布话题&#xff0c;与mqtt服务器进行数据通信 编译环境&#xff1a;Qt5.15.2 vs2019 需要mqttc库&#xff1a;mqttc.lib, mqttc.dll&#xff08;根据MQTT-C源码编译出来的库&#xff0c;参考cmake编译MQTT-C源码-CSDN博客&#xff09; 一、Qt pro文件编写 …

android kotlin 基础复习 继承 inherit

1、新建文件kt 2、代码&#xff1a; /**用户基类**/ open class Person1(name:String){/**次级构造函数**/constructor(name:String,age:Int):this(name){//初始化println("-------基类次级构造函数---------")println("name:${name},age:${age}")} }/**子…

信息安全工程师(1)计算机网络分类

一、按分布范围分类 广域网&#xff08;WAN&#xff09;&#xff1a; 定义&#xff1a;广域网的任务是提供长距离通信&#xff0c;运送主机所发送的数据。其覆盖范围通常是直径为几十千米到几千千米的区域&#xff0c;因此也被称为远程网。特点&#xff1a;连接广域网的各个结点…

计算机毕业设计 财会信息管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

【吊打面试官系列-Redis面试题】怎么理解 Redis 事务?

大家好&#xff0c;我是锋哥。今天分享关于【怎么理解 Redis 事务&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 怎么理解 Redis 事务&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 1&#xff09;事务是一个单独的隔离操作&#xff1…

【LabVIEW学习篇 - 22】:ActiveX

文章目录 ActiveXActiveX打开Windows颜色选择对话框ActiveX将浏览器嵌入到前面板 ActiveX ActiveX是微软推出的一个开放的技术集的统称&#xff0c;它是很早之前出现的OLE(object linking and Embedding)技术的扩展&#xff0c;它是基于COM(Component Object Model)技术而建立…

meta元素

1&#xff0c;meta元素有4个全局属性 charset 设置文档的编码类型&#xff0c;通常设置为utf-8 <meta charset"utf-8" /> content 配合name或者http-equiv属性使用&#xff0c;为其value、 name 元数据名称(name的值)说明application name当前页所属Web应用系…

进程替换篇

文章目录 目录 前言 1.进程替换概念 2.进程替换的原理 3.进程替换的接口 4.接口功能验证 ①execl接口演示 ②execlp接口演示 ③execle接口演示 ④execv接口验证 5.尝试写一个自己的shell【了解】 前言 你一定见过类似于这样的“黑框框”&#xff0c;这个“黑框框”其实就是…

js 请求api + 解析数据 2个例子

起因&#xff0c; 目的: 补补 js 基础。 例1&#xff0c; 请求天气 api&#xff0c; 天气数据api js 中的 await await 关键字只能在 async 函数内部使用。函数内部可以使用 await&#xff0c;但是在函数外部直接使用 await 是不允许的。 async function fetchWeatherData…

[mysql]最基本的SELECT...FROM结构

第0种&#xff1a;最基本的查询语句 SELECT 字段名&#xff0c;字段名 FROM 表名 SELECT 1&#xff1b; SELECT 11,3*2&#xff1b; FROM SELECT 11,3*2 FROM DUAL&#xff1b;#dual&#xff1a;伪表 我们可以用它来保持一个平衡 这里我们的值不需要在任何一个表里&#xf…

MyBaits的初理解

一.Mybaits的简介 Mybaits就是对JDBC的简化&#xff0c;就是对持久化的实现。 二.基础 需要导的dependencies <dependencies><!-- mybatis依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId>&l…

第 5 章多视图几何

本章讲解如何处理多个视图&#xff0c;以及如何利用多个视图的几何关系来恢复照相机位置信息和三维结构。通过在不同视点拍摄的图像&#xff0c;我们可以利用特征匹配来计算出三维场景点以及照相机位置。本章会介绍一些基本的方法&#xff0c;展示一个三维重建的完整例子&#…

获取多行文本内容,去掉首尾空格、去掉空字符串,解析为文本数组

核心代码 // 获取多行文本内容&#xff0c;去掉首尾空格、去掉空字符串&#xff0c;解析为文本数组 getMultiLineTexts(textareaValue) {return textareaValue.split("\n").map((v) > v.split("\t").join("").trim()).filter((v, i, ar) &g…

Qt | ubuntu20.04安装Qt6.5.3并创建一个example完整教程(涉及诸多开发细节,商用慎重)

点击上方"蓝字"关注我们 01、下载 >>> 下载Qt在线安装包 这里采用镜像地址进行下载,避免网络过慢。 镜像地址:http://mirrors.ustc.edu.cn/qtproject/archive/online_installers/4.5/ 选择最新版本下载,如截至目前最新版本为qt-unified-linux-x64-4.5.2…

“探索数字孪生技术:细数其在各行业的实际应用场景“

数字孪生城市是指在数字世界中创建一个同物理实体城市外观一致、行动一致、思想一致的 数字虚拟城市&#xff0c;实现对现实世界的监测、诊断、回溯、预测和决策控制&#xff0c;用于实体城市的规划、建设、 治理和优化等全生命周期管理&#xff0c;提高城市运行效率和市民居住…

内网穿透的应用-Deepin系统安装x11vnc实现任意设备无公网IP远程连接Deepin桌面

文章目录 前言1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 前言 本文主要介绍在Deepin系统中安装x11vnc工具&#xff0c;并结合Cpolar内网穿透工具实现任意设备无公网IP也可…

计算机毕业设计Pyhive+Spark招聘可视化 职位薪资预测 招聘推荐系统 招聘大数据 招聘爬虫 大数据毕业设计 Hadoop Scrapy

《SparkHive招聘推荐与预测系统》开题报告 一、引言 随着互联网技术的飞速发展&#xff0c;招聘行业积累了大量的数据&#xff0c;包括职位信息、应聘者信息、企业信息等。这些数据中蕴含着丰富的价值&#xff0c;能够帮助企业和求职者更好地匹配&#xff0c;提高招聘效率。然…

浮点数精度问题

为什么会产生精度问题&#xff1f; 我们带着这个问题去探寻浮点数二进制的存储原理 浮点数是怎么存在计算机中的&#xff1f; 浮点数在计算机中的表示通常遵循IEEE 754标准。其基本概念如下&#xff1a; 结构&#xff1a;浮点数由三部分组成&#xff1a; 符号位&#xff08;…