前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mqtt学习笔记--交叉编译移植(1)

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

作者头像
fensnote
发布2023-09-14 14:17:17
6100
发布2023-09-14 14:17:17
举报

简述

Mqtt目前在物联网行业的应用比较多,mqtt属于应用层的一个中间件,这个中间件实现消息的订阅发布机制。网上介绍Mqtt的实现原来的比较多,这里不细介绍。其实在我们之前的产品中,自己也开发的有类似的中间件,除了具有订阅发布的功能,还有一对一通信,在Linux系统里实现不同进程间的通信,通信基于TCP、UDP、Unix域套接字。这里要移植Mqtt主要是为了与其他厂家物联网产品(传感器、物联网网关、平台等)对接融合,这里把服务端和客户端都做移植。

准备工作

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

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

编译

  1. 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. 2. 编译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,然后执行:

代码语言:javascript
复制
make
make install
  1. 1. mosquitto编译 解压编译: ```cpp 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"

代码语言:javascript
复制

正常执行完成后,会生成Makefile,然后执行:
```bash
make
make install

编译问题

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

  1. 1. 对‘pthread_setname_np’未定义的引用

代码如下:

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

测试

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

启动订阅:topic为hello

代码语言:javascript
复制
mosquitto_sub -h 192.168.1.36 -p 1883 -t "hello"

发布消息:

代码语言:javascript
复制
mosquitto_pub -h 192.168.1.36 -p 1883 -t "hello" "test pub msg"

订阅这边接收到的消息:

代码语言:javascript
复制
mosquitto_sub -h 127.0.0.1 -p 1883 -t "hello"
test pub msg
test pub msg
test pub msg
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-09-04 08:32,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式技术笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简述
  • 准备工作
  • 编译
  • 编译问题
  • 测试
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档