加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

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

02/12 08:25
631
阅读需 5 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

Mqtt目前在物联网行业的应用比较多,mqtt属于应用层的一个中间件,这个中间件实现消息的订阅发布机制。网上介绍Mqtt的实现原来的比较多,这里不细介绍。其实在我们之前的产品中,自己也开发的有类似的中间件,除了具有订阅发布的功能,还有一对一通信,在Linux系统里实现不同进程间的通信,通信基于TCPUDP、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

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,然后执行:

make
make install

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"


正常执行完成后,会生成Makefile,然后执行:
```bash
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

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
SN65HVD232DR 1 Texas Instruments 3.3 V CAN Transceiver 8-SOIC -40 to 85

ECAD模型

下载ECAD模型
$2.3 查看
KSZ8001LI-TR 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, PQFP48

ECAD模型

下载ECAD模型
$4.89 查看
HFBR-2412MZ 1 Broadcom Limited Receiver,
$243.12 查看

相关推荐

电子产业图谱

专注嵌入式Linux应用开发,C/C++技术交流;Qt编程技术交流。