上一篇描述了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版本,如下图所示。
交叉编译
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
三、参考文章