IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    移植paho.mqtt.c到嵌入式linux平台

    reille发表于 2019-03-24 23:36:20
    love 0

    上一篇描述了paho.mqtt.embedded-c移植到嵌入式linux平台的过程。本文描述移植paho.mqtt.c到嵌入式linux平台的过程。

    与paho.mqtt.embedded-c一样,paho.mqtt.c是Eclipse paho项目MQTT Client开源库,为C版本。与前者相比,paho.mqtt.c支持全部特性,包括MQTT 5.0、WebSocket等。paho.mqtt.embedded-c更适用于使用MCU的嵌入式产品。

    一、移植OpenSSL

    编译paho.mqtt.c,它依赖OpenSSL库。所以需先移植OpenSSL库。

    下载源码

    源码下载地址:https://www.openssl.org/source/。写本博文时,OpenSSL最新稳定LTS(Long Term Support)版本为1.1.1。所以选择版本时,本人选择最新的1.1.1b版本,如下图所示。

    1552573011(1)

    交叉编译

    1. 配置

    ./config no-asm shared --prefix=$PWD/install --cross-compile-prefix=arm-linux-gnueabihf-

    上述命令中:

    no-asm:Do not use assembler code
    shared:编译连接成动态库
    –prefix=$PWD/install:指定编译后安装路径
    –cross-compile-prefix=arm-linux-gnueabihf-:指定交叉编译工具链

    2. 修改Makefile,找到Makefile中的所有-m64的地方,然后删除

    CNF_CPPFLAGS=-DNDEBUG 
    #CNF_CFLAGS=-pthread -m64 
    CNF_CFLAGS=-pthread 
    #CNF_CXXFLAGS=-std=c++11 -pthread -m64 
    CNF_CXXFLAGS=-std=c++11 -pthread 
    CNF_LDFLAGS= 
    CNF_EX_LIBS=-ldl -pthread

    3. 执行make && make install

    然后在install目录下会生成相应的库及头文件。

    二、移植paho.mqtt.c

    下载源码

    下载链接:https://github.com/eclipse/paho.mqtt.c/releases。选择Version 1.3.0 (Paho 1.4)版本。

    交叉编译

    1. 修改prefix定义:

    ifndef prefix 
    # modify by gyr 2019.03.14 
    #    prefix = /usr/local 
        prefix = build/install/local 
    endif

    2. 修改交叉编译工具链

    # modify by gyr 2019.03.14 
    #CC ?= gcc 
    CC := arm-linux-gnueabihf-gcc

    3. 修改INSTALL_DATA

    # modify by gyr 2019.03.14 
    #INSTALL_DATA =  $(INSTALL) -m 644 
    INSTALL_DATA =  $(INSTALL)

    4. 增加openssl库及头文件的路径

    # added by gyr 2019.03.14 
    CCFLAGS_SO += -I /home/vmuser/armlinux/3_middleware/2_openssl/openssl-1.1.1/openssl-1.1.1b/install/include 
    LDFLAGS_C += -L /home/vmuser/armlinux/3_middleware/2_openssl/openssl-1.1.1/openssl-1.1.1b/install/lib 
    LDFLAGS_CS += -L /home/vmuser/armlinux/3_middleware/2_openssl/openssl-1.1.1/openssl-1.1.1b/install/lib 
    LDFLAGS_A += -L /home/vmuser/armlinux/3_middleware/2_openssl/openssl-1.1.1/openssl-1.1.1b/install/lib 
    LDFLAGS_AS += -L /home/vmuser/armlinux/3_middleware/2_openssl/openssl-1.1.1/openssl-1.1.1b/install/lib 
    FLAGS_EXE += -L /home/vmuser/armlinux/3_middleware/2_openssl/openssl-1.1.1/openssl-1.1.1b/install/lib 
    FLAGS_EXES += -L /home/vmuser/armlinux/3_middleware/2_openssl/openssl-1.1.1/openssl-1.1.1b/install/lib

    上述路径改为你自己路径 即可。本人是放在了172-179行样子。

    5. 更改install和uninstall目标的定义:

    # added by gyr 2019.03.14 
    install: build 
        mkdir -p $(DESTDIR)$(PREFIX)${includedir} 
        mkdir -p $(DESTDIR)$(PREFIX)${libdir} 
        mkdir -p $(DESTDIR)$(PREFIX)${bindir} 
        mkdir -p $(DESTDIR)${man1dir} 
        mkdir -p $(DESTDIR)${man3dir} 
        cp -f ${MQTTLIB_C_TARGET} $(DESTDIR)${libdir} 
        cp -f ${MQTTLIB_CS_TARGET} $(DESTDIR)${libdir} 
        cp -f ${MQTTLIB_A_TARGET} $(DESTDIR)${libdir} 
        cp -f ${MQTTLIB_AS_TARGET} $(DESTDIR)${libdir} 
        cp -f ${MQTTVERSION_TARGET} $(DESTDIR)${bindir} 
        cp -f ${PAHO_C_PUB_TARGET} $(DESTDIR)${bindir} 
        cp -f ${PAHO_C_SUB_TARGET} $(DESTDIR)${bindir} 
        cp -f ${PAHO_CS_PUB_TARGET} $(DESTDIR)${bindir} 
        cp -f ${PAHO_CS_SUB_TARGET} $(DESTDIR)${bindir} 
        ln -sf lib$(MQTTLIB_C).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_C).so 
        ln -sf lib$(MQTTLIB_CS).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_CS).so 
        ln -sf lib$(MQTTLIB_A).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_A).so 
        ln -sf lib$(MQTTLIB_AS).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_AS).so 
        ln -sf lib$(MQTTLIB_C).so.${VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_C).so.${MAJOR_VERSION} 
        ln -sf lib$(MQTTLIB_CS).so.${VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_CS).so.${MAJOR_VERSION} 
        ln -sf lib$(MQTTLIB_A).so.${VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_A).so.${MAJOR_VERSION} 
        ln -sf lib$(MQTTLIB_AS).so.${VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_AS).so.${MAJOR_VERSION} 
        cp -f ${srcdir}/MQTTAsync.h $(DESTDIR)${includedir} 
        cp -f ${srcdir}/MQTTClient.h $(DESTDIR)${includedir} 
        cp -f ${srcdir}/MQTTClientPersistence.h $(DESTDIR)${includedir} 
        cp -f ${srcdir}/MQTTProperties.h $(DESTDIR)${includedir} 
        cp -f ${srcdir}/MQTTReasonCodes.h $(DESTDIR)${includedir} 
        cp -f ${srcdir}/MQTTSubscribeOpts.h $(DESTDIR)${includedir}    
        - cp -f doc/man/man1/paho_c_pub.1 $(DESTDIR)${man1dir} 
        - cp -f doc/man/man1/paho_c_sub.1 $(DESTDIR)${man1dir} 
        - cp -f doc/man/man1/paho_cs_pub.1 $(DESTDIR)${man1dir} 
        - cp -f doc/man/man1/paho_cs_sub.1 $(DESTDIR)${man1dir} 
    #    - cp -f ${blddir}/doc/MQTTClient/man/man3/MQTTClient.h.3 $(DESTDIR)${man3dir} 
    #    - cp -f ${blddir}/doc/MQTTAsync/man/man3/MQTTAsync.h.3 $(DESTDIR)${man3dir} 
        @echo "" 
        @echo "make install finish", `date` 
        @echo "" 
    # added by gyr 2019.03.14 
    uninstall: 
        rm -rf $(blddir_work) 
        @echo "" 
        @echo "make uninstall finish", `date` 
        @echo ""

    即把paho.mqtt.c的库及其头文件安装在build/install目录下。

    6. make && make install

    三、参考文章

    • https://blog.csdn.net/onlyshi/article/details/78649707?utm_source=blogxgwz3
    » 本文地址: http://velep.com/archives/1430.html
    » 文章出处: reille博客—http://velep.com , 如果没有特别声明,文章均为reille博客原创作品
    » 郑重声明: 原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
    分享到:
    推荐阅读相关文章:
    • 移植paho.mqtt.embedded-c到嵌入式linux平台
    • 移植MQTT服务端mosquitto到嵌入式linux平台
    • error: ‘__locale_t’ has not been declared
    • Window不能访问Ubuntu16.04 Samba共享
    • 关于FLT_EPSILON、DBL_EPSILON、LDBL_EPSILON
    • 移植sqlite到嵌入式linux平台
    • stm32移植ecos #3,我的stm32开发板配置
    • stm32移植ecos #2,选购stm32开发板


沪ICP备19023445号-2号
友情链接