【MQTT】mosquitto 的 “下载、交叉编译、使用” 详细教程,手把手搭建一个MQTT Broker

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、mosquitto 的下载
  • 🎄三、mosquitto 的交叉编译
    • ✨3.1 openssl 的下载、交叉编译
    • ✨3.2 cJSON 的下载、交叉编译
    • ✨3.3 mosquitto 交叉编译
  • 🎄四、mosquitto 的使用教程
    • ✨4.1 mosquitto 部署到嵌入式开发板
  • 🎄五、总结


在这里插入图片描述

在这里插入图片描述

🎄一、概述

本文介绍如何使用 mosquitto 搭建一个 MQTT Broker。

Eclipse Mosquitto是一个开源(EPL/EDL许可)消息代理,它实现了MQTT协议版本 5.0、3.1.1和3.1。Mosquito 是轻量级的,适用于从低功耗单板计算机到全服务器的所有设备。

MQTT协议提供了一种使用发布/订阅模型执行消息传递的轻量级方法。这使得它适用于物联网消息传递,例如使用低功率传感器或移动设备,如手机、嵌入式计算机或微控制器。

Mosquitto项目还提供了一个用于实现MQTT客户端的C库,以及非常流行的Mosquitto_pub和Mosquitto_sub命令行MQTT客户端。

Mosquito是Eclipse基金会的一部分,是iot.Eclipse.org项目。开发由Cedalo推动。

关于 的更多内容,可以参考其官网:https://mosquitto.org/


在这里插入图片描述

🎄二、mosquitto 的下载

mosquitto 的下载地址:https://mosquitto.org/download/

如果不想下载最新版本的,也可以在其GitHub路径去下载:https://github.com/eclipse/mosquitto/tags

本文是直接在官网下载的,下载的版本是:mosquitto-2.0.18.tar.gz

在这里插入图片描述


在这里插入图片描述

🎄三、mosquitto 的交叉编译

在编译 mosquitto-2.0.18.tar.gz 之前需要先编译其依赖库:openssl库 和 cJSON库。

✨3.1 openssl 的下载、交叉编译

本文下载的是 openssl-OpenSSL_1_1_1g.tar.gz
下载地址:https://codeload.github.com/openssl/openssl/tar.gz/refs/tags/OpenSSL_1_1_1g
为什么使用这么旧的版本,因为这个我之前编译过,而且使用没问题。

编译步骤:

  • 1、解压缩

    tar zxf openssl-OpenSSL_1_1_1g.tar.gz
    
  • 2、进入目录,并配置输出目录和交叉编译器, (linux-generic32表示是32位操作系统,个别文章加了这个选项就不用去掉 -m64,我这里行不通)

    cd openssl-OpenSSL_1_1_1g/
    ./config no-asm shared no-async --prefix=`pwd`/ssl_result  --cross-compile-prefix=aarch64-mix210-linux-
    
  • 3、执行下面命令,删除Makefile文件的 -m64

    sed -i 's/-m64//' Makefile
    

    执行后,可以避免出现这个编译错误:aarch64-mix210-linux-gcc: error: unrecognized command line option '-m64'

  • 4、编译、安装

    make && make install
    

成功编译后,在openssl-OpenSSL_1_1_1g/目录会生成一个ssl_result目录,可以看到里面生成的库:
在这里插入图片描述


✨3.2 cJSON 的下载、交叉编译

cJSON库是C语言编写的,用来解析JSON信息的库,本文使用的是 cJSON-1.7.17.tar.gz
下载地址:https://codeload.github.com/DaveGamble/cJSON/tar.gz/refs/tags/v1.7.17
cJSON 的编译很简单,可以使用下面shell脚本编译,将下面shell脚本保存成cJSON_install.sh,与下载的cJSON-1.7.17.tar.gz放在同一目录,直接执行cJSON_install.sh编译即可:

#! /bin/shexport CJSON_VER=cJSON-1.7.17
CROSSS_COMPILE_TOOL=aarch64-mix210-linux-# 1.解压缩
rm ${CJSON_VER} -rf
tar zxf ${CJSON_VER}.tar.gz# 2.编译
cd ${CJSON_VER}# 2.1 修改安装目录路径
sed -i '/PREFIX ?= /a PREFIX ?= $(PWD)\/..\/${CJSON_VER}_result' Makefile
sed -i '/PREFIX ?= \/usr\/local/d' Makefilemake CC=${CROSSS_COMPILE_TOOL}gcc
make install
cd ..

编译过程图:
在这里插入图片描述


✨3.3 mosquitto 交叉编译

编译步骤:

  • 1、解压缩、进入源码目录:

    tar zxf mosquitto-2.0.18.tar.gz
    cd mosquitto-2.0.18
    
  • 2、修改config.mk,指定依赖库的头文件路径、库路径,并且指定安装目。
    config.mk 的 146 行,在ARCH:=$(shell uname -p)语句下面添加下面语句:

    # 指定ssl库、cJSON库的头文件和库文件
    CFLAGS += -I/home/samba/01_libCompile/013_mqtt/MQTT_Broker/result_dir/ssl_result/include -I/home/samba/01_libCompile/013_mqtt/MQTT_Broker/result_dir/cJSON-1.7.17_result/include
    LDFLAGS+= -L/home/samba/01_libCompile/013_mqtt/MQTT_Broker/result_dir/ssl_result/lib -L/home/samba/01_libCompile/013_mqtt/MQTT_Broker/result_dir/cJSON1.7.17_result/lib -lssl -lcrypto -dl# 指定安装目录
    DESTDIR=/home/samba/01_libCompile/013_mqtt/MQTT_Broker/result_dir/mosquitto-2.0.18_result
    

    没有添加上面语句,或者添加不正确的话,会报编译错误:../config.h:61:12: fatal error: openssl/opensslconf.h: No such file or directory
    注意:
    1、指定的路径必须使用绝对路径,因为这个config.mk可能被其他层级的Makefile包括,不使用绝对路径会出错。
    2、-lssl -lcrypto -dl这几个选项也要加,不然链接时可能会报错。
    3、DESTDIR目录一定要指定,不然make install的时候可能会安装到根目录去。

  • 3、编译、安装

    make CC=aarch64-mix210-linux-gcc CXX=aarch64-mix210-linux-g++
    make install
    

编译完成后,可以看到如下的几个文件:
在这里插入图片描述


在这里插入图片描述

🎄四、mosquitto 的使用教程

✨4.1 mosquitto 部署到嵌入式开发板

我这个是交叉编译,是要部署到嵌入式开发板的,如果读者是在Ubuntu等Linux发行版系统部署的话,也可以参考,主要就是让依赖的动态库可以被找到。

将前面已编译 openssl、cJSON、mosquitto 目录放到一块,我这里是放在 mosquitto_result_dir 目录,如下:
在这里插入图片描述

然后将整个目录复制到嵌入式开发板。

在这里插入图片描述

🎄五、总结

本文介绍了 MQTT Broker 开源库 mosquitto 的下载、交叉编译、使用教程,如果想了解 mosquitto ,一定会有帮助。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

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

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

相关文章

传统企业如何实现数字化转型?

随着信息技术的迅猛发展和互联网的普及,数字化转型已经成为企业和组织不可忽视的趋势,数字化转型对企业和组织来说是必要的,它可以提升竞争力,推动创新发展,实现数据驱动决策,提升用户体验并适应未来发展。…

中北大学软件学院javaweb实验二JSP应用开发实验报告

实验时间 2024年4月 25 日17时至 22 时 学时数 4 1.实验名称 实验2:JSP应用开发(2学时) 2.实验目的 (1)学会编写和运行简单的JSP页面,理解其运行原理; (2)学会使用JSP的声明、表达式、脚…

Rust 适合哪些场景?

目录 二、Rust 适合哪些场景? 三、Rust 社区的发展趋势如何? 四、Rust 快速搭建一个WebServer服务器 一、Rust是什么? Rust是一门赋予每个人构建可靠且高效软件能力的语言。 Rust 程序设计语言 一门帮助每个人构建可靠且高效软件的语言。…

Python写了for i in range(10)却只打印一遍?

题目:定义一个两个参数的重复打印函数,第一个参数指定要打印的字符串,第二个参数指定要重复打印的次数,在主程序中调用该函数,打印10遍你的学号姓名。 为什么调用函数后结果只打印了一遍? 看了题目感觉就很诡异&#…

爬虫-无限debug场景 解决方式

解决无限debug 场景1 1. 鼠标右键 选择 continue to here(此处不停留)2. 鼠标右键 选择 edite breakpoint 设置 10 保证条件不成立 这行永远不执行3.方法置空 1. 方法调用加断点2. 控制台 setInterval function name() {}4. 替换文件 5. hoo…

Apache SeaTunnel 正式发布2.3.5版本,功能增强及多个Bug修复

经过两个月的筹备,我们在2.3.4版本基础上进行了新一轮的迭代,本次更新不仅修复了多个关键问题,还引入了若干重要功能增强和性能优化。 在此,我们先提前感谢社区成员的贡献和支持,如果你想升级最新的版本,快…

websocket最大数量的限制问题

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

安全 | 开源入侵防御系统 Snort

目录 Snort 概要 入侵预防系统模式 数据包记录器和嗅探器模式 网络安全学习路线 (2024最新整理) 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明: Snort 概要 Snort 概要 是世界上最重要的开源入…

《十日终焉》中的定律整理-向虫队学习(举例+持续更新)

1、二八定律 二八定律,又称帕累托法则,也叫巴莱多定律。 是19世纪末20世纪初意大利经济学家巴莱多发明的。其中指出,约仅有20%的因素影响80%的结果。也就是说:所有变因中,最重要的仅有20%,虽然剩余的80%占…

实习体验报告怎么写:AI产品助理实习经历

笔灵实习体验报告模版免费分享,更多需要可以点击使用⬇️ https://ibiling.cn/scene/inex?fromcsdnsx 一、实习背景与目的在过去的几个月里,我有幸在一家知名科技公司实习,担任AI产品助理的角色。这次实习让我有机会深入了解AI领域&#x…

JAVA 双亲委派之一

JAVA 双亲委派之一 JVM类加载流程 java语言系统内置了众多类加载器,从一定程度上讲,只存在两种不同的类加载器:一种是启动类加载器,此类加载由C实现,是JVM的一部分;另一种就是所有其他的类加载器&#xf…

ASP.NET学生成绩管理系统

摘要 本系统依据开发要求主要应用于教育系统,完成对日常的教育工作中学生成绩档案的数字化管理。开发本系统可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用&#xf…

【网络】gateway 可以提供的一些功能之三 “ 支持Eureka服务发现 ”

一、Eureka是干什么的 Eureka就像是一个电话簿,但是用来存储和管理各种微服务的地址信息。它帮助微服务之间相互发现和交流,就像你想找某人电话号码一样,只需查看电话簿就能找到他们的联系方式。Eureka也可以帮助系统在服务出现问题时自动发现…

STM32CubeMX软件使用(超详细)

1、Cube启动页介绍 2、芯片选择页面介绍 3、输入自己的芯片型号,这里以STM32U575RIT6举例 4、芯片配置页码介绍 5、芯片外设配置栏详细说明 6、点击ClockConfiguration进行时钟树的配置,选择时钟树后可以选择自己想使用的时钟源,也可以直接输…

unreal engine4 创建动画蒙太奇

UE4系列文章目录 文章目录 UE4系列文章目录前言一、创建动画蒙太奇 前言 动画蒙太奇的官方解释:Animation Montages are animation assets that enable you to combine animations in a single asset and control playback using Blueprints.You can use Animation…

与Apollo共创生态:助力自动驾驶迈向新台阶

引言Apollo七周年大会企业协同工具链携手伙伴共创生态未来展望与总结 引言 2024年4月19日,一场智能汽车未来的盛宴正朝我们走来——Apollo开放平台的七周年大会。 此次大会主题为“破晓•拥抱智变时刻”其中“破晓”象征着新时代的曙光,意味着智能汽车技…

最新版在线客服系统源码

源码介绍 首发最新在线客服系统源码,优化更好并且重构源码布局UI 性能不吃cpu并发快,普通1H2G都能带动最新版只要是服务器都能带动 搭建即可使用,操作简单,易懂 修复了老版本bug 内附有搭建教程 gofly.v1kf.com 运行环境 Nginx 1.20 MySQL 5.7 演示截图

Spring IoCDI(3)—DI详解

目录 一、属性注入 二、构造方法注入 小结:构造函数的注入 三、Setter注入 四、三种注入的优缺点分析(面试题) 1、属性注入 优点: 缺点: 2、构造方法注入(Spring4.X推荐) 优点&#x…

netty配置SSL、netty配置https(开发)

netty配置SSL、netty配置https(开发) 我们在开发下使用ssl,所用的证书将不被客户端信任。 方案一 快速。使用netty提供的临时签发证书 private static SslContext sslContext null;public ServerChannelHandler(RouterConfig config) {th…

使用Python在PowerPoint演示文稿之间复制样式(复制幻灯片母版)

在专业演示文稿设计与制作领域,多场演示间保持一致性至关重要。在PowerPoint演示文稿之间复制幻灯片母版成为了一项关键技巧,用以维持统一的视觉风格,确保品牌形象的一致性,并提升观众的参与度。这一做法不仅能节省宝贵的时间&…