mqtt 客户端 arm linux

上一篇描述了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

三、参考文章

» 文章出处: reille博客—http://velep.com , 如果没有特别声明,文章均为reille博客原创作品
» 郑重声明: 原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
分享到:

 Leave a Reply

(必须)

(我会替您保密的)(必须)

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.

   
© 2012 velep.com | reille blog | 管理| 粤ICP备15065318号-2| 谷歌地图| 百度地图| Suffusion theme|Sayontan Sinha

无觅相关文章插件,快速提升流量