当前位置: 首页 > news >正文

交叉编译 MQTT/Mosquitto

交叉编译 MQTT/Mosquitto

概述

logo

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

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

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

  • 官方网址:https://mosquitto.org
  • GitHub: https://github.com/eclipse/mosquitto

下载

如果以商用量产为目的,一般选择正式的发行版本为佳。在官方网址 Download 页面下方会显示最新可下载的源码压缩包。根据需求选择合适的版本进行下载,以最新的 2.0.15 版本为例,在页面下方点击链接下载源码包 mosquitto-2.0.15.tar.gz。

download

也可以直接使用 wget 命令下载:

wget https://mosquitto.org/files/source/mosquitto-2.0.15.tar.gz

如果需要使用特定版本,可以在 https://mosquitto.org/files/ 位置找到 mosquitto 的历史发行版本。进入网页之后选择 source/ 链接,然后选择下载压缩包即可。

交叉编译

解压缩源码包:

tar -xvf mosquitto-2.0.15.tar.gz

解压缩源码包之后建议先阅读 README.md 与 README-compiling.md 文档,里面有关于编译的相关信息。

在 mosquitto 的文档及配置文件中有提及到依赖关系,最主要的是依赖 OpenSSL 与 cJSON 库,如果需要完整编译可以先参考「交叉编译 OpenSSL」与「交叉编译 cJSON」两篇文章。需要注意的点就是,需要使用 make DESTDIR=$BUILDSYSROOT install 将编译产物部署到 sysroot 目录便于 mosquitto 编译时依赖,效果类似于 apt install *-dev 安装开发依赖包。

在 README.md 文档中也提及到,如果不需要依赖 cJSON 可以使用 make WITH_CJSON=no 或者不需要依赖 OpenSSL 时使用 make WITH_TLS=no 的方式来禁用编译依赖。

首先创建一个环境配置文件 aarch64-environment-setup,配置最重要的交叉编译环境变量。

aarch64-environment-setup:

export TOOLCHAIN_ROOT=/opt/toolchains/aarch64--glibc--stable-2022.03-1
export BUILDSYSROOT=$TOOLCHAIN_ROOT/aarch64-buildroot-linux-gnu/sysroot
export PATH=$TOOLCHAIN_ROOT/bin:$PATHexport PREFIX=/usrexport CC="aarch64-linux-gcc --sysroot=$BUILDSYSROOT"
export CXX="aarch64-linux-g++ --sysroot=$BUILDSYSROOT"
export CPP="aarch64-linux-gcc -E --sysroot=$BUILDSYSROOT"
export LD="aarch64-linux-ld --sysroot=$BUILDSYSROOT"
export AR=aarch64-linux-ar
export AS=aarch64-linux-as
export NM=aarch64-linux-nm
export GDB=aarch64-linux-gdb
export OBJDUMP=aarch64-linux-objdump
export OBJCOPY=aarch64-linux-objcopy
export RANLIB=aarch64-linux-ranlib
export READELF=aarch64-linux-readelf
export STRIP=aarch64-linux-stripexport PKG_CONFIG_SYSROOT_DIR=$BUILDSYSROOT
export PKG_CONFIG_PATH=$BUILDSYSROOT/usr/lib/pkgconfig:$BUILDSYSROOT/usr/share/pkgconfig

在本示例中,交叉编译工具位于 /opt/toolchains/aarch64--glibc--stable-2022.03-1/bin 目录下,将该目录配置到 PATH 环境变量,让系统能够正确搜索到。同时在配置 CCCXXCPPLD 环境变量时指定 --sysroot=<dir> 参数让交叉编译器搜索 dir 目录下的头文件与库文件,而不是 /usr/include/usr/lib

source aarch64-environment-setup
make
make prefix=/usr WITH_STRIP=yes DESTDIR=$BUILDSYSROOT install
  • 在源码目录下创建环境配置文件并调用 source 命令让环境变量生效;
  • 执行 make 命令编译源码;
  • 在 config.mk 文件中定义了 prefix 以及 WITH_STRIP 的默认值,根据实际需求在执行 make 指令时重新进行配置;
  • 使用 DESTDIR 参数作为安装目标文件的前缀变量,后面带上你希望安装到的文件夹路径,在本示例中,BUILDSYSROOT 指的是交叉编译工具链的 sysroot 目录,此环境变量在 aarch64-environment-setup 中已定义。更详细介绍可以参考 DESTDIR 官方介绍,也可以参考「交叉编译 libcap」关于 DESTDIR 的用法说明。

最终你就可以在 $BUILDSYSROOT/usr 文件夹中找到交叉编译好的 mosquitto 头文件及库文件。如果需要以软件包的形式发布,可以指定 DESTDIR 为其他目录,比如 DESTDIR=/tmp/sysroot 则最终交叉编译出来的产物会在 /tmp/sysroot 文件夹下。Good luck.

欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景


△\triangle 交叉编译 cJSON

http://www.lryc.cn/news/18037.html

相关文章:

  • 无重复字符的最长子串的解法
  • Apache Hadoop生态部署-zookeeper单机安装
  • java面试题-IO流
  • Java性能-GC工具
  • 复赛名单公布!2022隐私计算HACKATHON大赛火热进行中!
  • 微信小程序的全局弹窗以及全局实例
  • 100种思维模型之诺依曼思维模型-019
  • Python + Airtest + poco + pytest + pytest-html 实现Android App自动化测试框架
  • 一篇文章让你学会spring
  • golang入门笔记——测试
  • 【CSAPP】整数运算
  • 使用 xshell 远程连接(使用 xftp 远程传输)
  • 一个例子搞懂子网划分及子网掩码的计算
  • SPI机制源码:JDK Dubbo Spring
  • Spring Security+jwt+redis+自定义认证逻辑 权限控制
  • 打游戏什么蓝牙耳机好用?打游戏比较好的蓝牙耳机
  • 炔基点击交联试剂1704097-05-1,Alkyne-A-DSBSO crosslinker,发生相应点击反应
  • 刷题记录:牛客NC24309Overplanting (Silver)
  • Spring Boot中使用Sa-Token实现轻量级登录与鉴权
  • 《分布式技术原理与算法解析》学习笔记Day20
  • 【2023-2-23】FastDeploy 安装教程
  • rollup.js 一个简单实用的打包工具
  • 数据结构与算法之最小爬楼梯费用动态规划
  • 阿里云ACA认证如何获取?
  • 【Python入门第十六天】Python If ... Else
  • 两数之和的解法
  • 领导催我优化SQL语句,我求助了ChatGPT。这是ChatGPT给出的建议,你们觉得靠谱吗
  • ArcGIS手动分割矢量面要素从而划分为多个面部分的方式:Cut Polygons Tool
  • 【LeetCode】剑指 Offer 13. 机器人的运动范围 p92 -- Java Version
  • [oeasy]python0091_仙童公司_八叛逆_intel_8080_altair8800_牛郎星