【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/sh

export 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' Makefile

make 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 ,一定会有帮助。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARIMA模型在河流水质预测中的应用_含代码

#水质模型 #时间序列 #python应用 ARIMA 时间序列模型简介 时间序列是研究数据随时间变化而变化的一种算法,是一种预测性分析算法。它的基本出发点就是事物发展都有连续性,按照它本身固有的规律进行。ARIMA(p,d,q)模型全称为差分自回归移动平均模型 (A…

单链表经典oj题(2)

前言 这次将要把剩下的oj题将以图解和自己的理解把它讲解完,希望对大家有所帮助,这次的讲解也是干货 第一题 21. 合并两个有序链表 - 力扣(LeetCode) ok这次就简单点,大家自己去看题目了 将两个升序链表合并为一个…

【Linux】进程的七大状态详解!

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

如何查看centos7中Java在哪些路径下

在 CentOS 7 上,你可以通过几种方式查找安装的 Java 版本及其路径。以下是一些常用的方法: 1. 使用 alternatives 命令 CentOS 使用 alternatives 系统来管理同一命令的多个版本。你可以使用以下命令来查看系统上所有 Java 安装的配置: su…

C++动态内存管理:与C语言动态内存管理的差异之争

当你改错一行代码的时候: 当你想要重构别人的代码时: 目录 前言 一、C/C的内存分布 二、C/C语言中的动态内存管理 三、new与delete的实现原理 总结: 前言 在C中,内存管理是一个至关重要的主题。正确地管理内存可以避免内存泄…

上海AI Lab开源首个可替代GPT-4V的多模态大模型

与开源和闭源模型相比,InternVL 1.5 在 OCR、多模态、数学和多轮对话等 18 个基准测试中的 8 个中取得了最先进的结果。 上海AI Lab 推出的 InternVL 1.5 是一款开源的多模态大语言模型 (MLLM),旨在弥合开源模型和专有商业模型在多模态理解方面的能力差距…

二、SPI协议

文章目录 总述1.SPI接口2. SPI工作模式3. SPI通信时序4. SPI协议 对比 UART协议(上一篇文章刚介绍过uart协议,这里来对比一下) 总述 SPI(Serial Peripheral Interface)是一种高速的、全双工、同步的串行通信总线&…

【影片欣赏】【指环王】【魔戒:国王归来 The Lord of the Rings: The Return of the King】

往期魔戒博客见: 【影片欣赏】【指环王】【魔戒:护戒使者 The Lord of the Rings: The Fellowship of the Ring】 【影片欣赏】【指环王】【魔戒:双塔奇谋 The Lord of the Rings: The Two Towers】 2004年发行,Special Extend…

副业兼职没那么难,视频号带货,1天稳定500,适合新手操作

向大家推荐一个项目:视频号书单号带货玩法。我已经实践了一段时间,并成功售出了1200多单,赚取了2万多元。这个项目表现相当出色,强烈推荐给大家! 周周近财:让网络小白少花冤枉钱,赚取第一桶金 …

Linux vscode push报错fatal: Authentication failed

注意啊,Git基于密码的身份验证已经被删除了,所以这个报错发生时无论密码正确与否,以及参考比较旧的改bug教程,都没法提交。进入提示的网址,生成个人访问令牌就好了

200-500人规模工厂网络方案(中小企业网络)

一、方案概述 工厂一般有单独的弱电房,类似这种 里面采用的方案如下: 主要考虑有线、无线、财务、办公、访客等业务,便于维护管理和后续扩容 还需要 Wi-Fi覆盖零死角高速率,工作不卡顿 同时考虑AV反病毒、IPS入侵防御、用户准…

【MySQL数据库开发设计规范】之命名规范

欢迎点开这篇文章,自我介绍一下哈,本人姑苏老陈 ,是一名JAVA开发老兵。 本文收录于 《MySQL数据库开发设计规范》专栏中,该专栏主要分享一些关于MySQL数据库开发设计相关的技术规范文章,定期更新,欢迎关注&…

python自动化生成ppt

使用Python和python-pptx创建PPT 在这篇博客中,我们将探讨如何使用Python库python-pptx来创建一个简单的PowerPoint演示文稿(PPT)。这个库允许我们以编程方式创建幻灯片、添加文本、图片、表格和自定义形状。 安装python-pptx 首先&#x…

智能助手上线,大模型提供云服务专属顾问

业务背景 在使用云服务的时候,当您遇到复杂问题,如配置、关联或计费方式不明确时,可能需要向客服提交工单进行技术沟通。在漫长的工作过程中,耗费了宝贵的时间和精力。 2024 年 4 月,百度智能云正式推出了融合文心大…

单调栈:(C++)

在题目的要求中,存在先进后出(即在前面的数据需要遍历到后面的某一数据时才能确定计算值)单调栈在一部分解题场景中避免了暴力解法的高时间复杂度问题,但是在做题过程中视情况而定,有些题目的最优解不一定使用单调栈&a…

【原创】springboot+mysql物资库存管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

利用AI提高内容生产效率的五个方案

目录 如何利用AI提高内容生产效率? ​编辑方向一:自动化内容生成 方向二:内容分发与推广 方向三:内容分析与优化 方向四:图像和音频处理 方向五:自动编辑和校对 如何利用AI提高内容生产效率? 简介&#xff1a…

车载电子电器架构 —— 应用软件开发(上)

车载电子电器架构 —— 应用软件开发(上) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

CellChat包文献介绍

Inference and analysis of cell-cell communication using CellChat - PubMed (nih.gov) 目录 在线数据 摘要 基础介绍 分析结果 1,概述 2,识别预测通路 3,连续的信号转导 4,预测空间共定位细胞群之间的关键信号转导事件…