😁博客主页😁:🚀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 ,一定会有帮助。
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁