Mqtt学习笔记--交叉编译移植(1)

简介: Mqtt学习笔记--交叉编译移植(1)

简述


Mqtt目前在物联网行业的应用比较多,mqtt属于应用层的一个中间件,这个中间件实现消息的订阅发布机制。网上介绍Mqtt的实现原来的比较多,这里不细介绍。


其实在我们之前的产品中,自己也开发的有类似的中间件,除了具有订阅发布的功能,还有一对一通信,在Linux系统里实现不同进程间的通信,通信基于TCP、UDP、Unix域套接字。


这里要移植Mqtt主要是为了与其他厂家物联网产品(传感器、物联网网关、平台等)对接融合,这里把服务端和客户端都做移植。


准备工作


这里选用的mosquitto进行移植,mosquitto依赖openssl和uuid,下面是我选用的版本:


  1. mosquitto-2.0.10.tgz
  2. openssl-3.0.7.tgz
  3. libuuid-1.0.3.tar.gz


编译


  1. 编译libuuid
    解压编译
tar xvzf libuuid-1.0.3.tar.gz
./configure --prefix=/home/workplace/mqtt/uuid/build-hi3536c/install CC=arm-hisiv500-linux-gcc

正常执行完成后,会生成Makefile,然后执行:

make
make install


  1. 编译lib
    解压编译:
tar xvzf openssl-3.0.7.tar.gz
CC=arm-hisiv500-linux-gcc ./config no-asm no-async shared --prefix=/home/workplace/hi3536c/openssl/install

正常执行完成后,会生成Makefile,然后执行:

make
make install


  1. mosquitto编译
    解压编译:
tar xvzf   mosquitto-2.0.10.tar.gz

#我是把以上编译的uuid和openssl的库文件拷贝到了交叉编译器的lib里,所以下面编译mosquito时,就没有再加路径
#
make WITH_SRV=no CC=arm-none-linux-gcc CXX=arm-none-linux-g++ LDFLAGS="-lssl -lcrypto -luuid -lm -lpthread -ldl"

正常执行完成后,会生成Makefile,然后执行:

make
make install


编译问题


可能不同的编译器会有不同的问题,我这里用的海思的编译器,有一下错误:


  1. 对‘pthread_setname_np’未定义的引用
    代码如下:

这个函数在当前编译器的库中不存在,这个可以直接注释掉,再次编译就没问题了。


测试


Windows下安装的mosquito,直接启动,用mosquito_sub订阅,mosquito_pub发布,看看能不能收到。


启动订阅:

topic为hello

mosquitto_sub -h 192.168.1.36 -p 1883 -t "hello"


发布消息:

mosquitto_pub -h 192.168.1.36 -p 1883 -t "hello" "test pub msg"


订阅这边接收到的消息:

mosquitto_sub -h 127.0.0.1 -p 1883 -t "hello"
test pub msg
test pub msg
test pub msg


移植的源码已上传csdn:

https://download.csdn.net/download/wuquan_1230/88291514?spm=1003.2166.3001.6637.1


包含源代码+编译好的海思v500编译器版本+编译好的新塘NUC980处理器。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
6月前
|
消息中间件 存储 算法
RocketMQ学习笔记
RocketMQ学习笔记
155 0
|
6月前
|
编解码 Ubuntu 算法
【Linux】NUC977移植使用MQTT(基于mosquitto)
【Linux】NUC977移植使用MQTT(基于mosquitto)
|
消息中间件 存储 缓存
RibbitMQ学习笔记之MQ练习(三)
RibbitMQ学习笔记之MQ练习
49 0
|
消息中间件 网络协议 数据中心
RabbmitMQ学习笔记-RabbitMQ集群架构模式
RabbmitMQ学习笔记-RabbitMQ集群架构模式
84 0
|
消息中间件 Java
RabbmitMQ学习笔记-RabbitMQ与SpringBoot2.0整合实战
在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。
116 0
|
消息中间件 中间件
RibbitMQ学习笔记之MQ发布确认
RibbitMQ学习笔记之MQ发布确认
57 0
|
消息中间件 网络协议
RibbitMQ学习笔记之MQ练习(二)
RibbitMQ学习笔记之MQ练习
34 0
|
消息中间件 网络协议 Java
RibbitMQ学习笔记之MQ练习(一)
RibbitMQ学习笔记之MQ练习
78 0
|
消息中间件 存储 网络协议
RibbitMQ学习笔记之MQ 的相关概念
RibbitMQ学习笔记之MQ 的相关概念
82 0
|
消息中间件 存储 缓存
RocketMQ 5.0 可观测能力升级: Tracing 链路追踪介绍|学习笔记
快速学习 RocketMQ 5.0 可观测能力升级: Tracing 链路追踪介绍
824 0
RocketMQ 5.0 可观测能力升级: Tracing 链路追踪介绍|学习笔记