上一篇描述了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
下载源码
交叉编译
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(#换成@)
分享到: