• 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
    
    • 1
    • 2

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

    make
    make install
    
    • 1
    • 2
    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
    
    • 1
    • 2

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

    make
    make install
    
    • 1
    • 2
    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"
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    make
    make install
    
    • 1
    • 2

    编译问题

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

    1. 对‘pthread_setname_np’未定义的引用在这里插入图片描述
      代码如下:
      在这里插入图片描述
      这个函数在当前编译器的库中不存在,这个可以直接注释掉,再次编译就没问题了。

    测试

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

    启动订阅:
    topic为hello

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

    发布消息:

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

    订阅这边接收到的消息:

    mosquitto_sub -h 127.0.0.1 -p 1883 -t "hello"
    test pub msg
    test pub msg
    test pub msg
    
    • 1
    • 2
    • 3
    • 4

    移植的源码已上传csdn:
    https://download.csdn.net/download/wuquan_1230/88291514?spm=1003.2166.3001.6637.1
    包含源代码+编译好的海思v500编译器版本+编译好的新塘NUC980处理器。
    图片

  • 相关阅读:
    插入排序与希尔排序
    Golang | 并发
    Pytest UI自动化测试实战实例
    思腾云计算
    C 语言通用MySQL 功能增删查改功能.
    (Golang) 牛客 在线编程 Go语言入门
    员工上班总是摸鱼该怎么管?(有效防止员工上班摸鱼的方法)
    IndexTree以及应用
    Istio服务网格进阶⑥:Istio服务网格之流量治理超时配置
    日本知名汽车零部件公司巡礼系列之株式会社123
  • 原文地址:https://blog.csdn.net/wuquan_1230/article/details/132637809