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



mqtt移植到嵌入式linux,移植paho.mqtt.c到嵌入式linux平台_第1张图片

上一篇描述了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版本,如下图所示。

mqtt移植到嵌入式linux,移植paho.mqtt.c到嵌入式linux平台_第2张图片

交叉编译

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

下载源码

交叉编译

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(#换成@)

分享到:

你可能感兴趣的:(mqtt移植到嵌入式linux)