Linux 基于openssl库的paho.mqtt.c交叉编译

一、相关说明

x86平台:Ubuntu 22.04

ARM硬件平台:NUC980DK71YC

交叉工具链版本:v12.3.0

二、交叉编译openssl

2.1、源码下载地址

[ Old Releases ] - /source/old/index.html (openssl.org)

2.2、下载版本号

博主本次使用的版本号为:openssl-1.0.2f.tar.gz

2.3、交叉编译步骤

(1)tar -zxvf openssl-1.0.2f.tar.gz
(2)cd openssl-1.0.2f
(3)./config no-asm shared no-async --prefix=$PWD/_install --cross-compile-prefix=arm-linux-
(4)修改Makefile,删除-m64参数。
(5)make && make install

Note:
    a、本次安装目录是当前路径下的_install。
    b、no-asymc是因为arm-gk720x-linux-uclibcgnueabi-gcc没有提供GNU C的ucontext库。
    c、--prefix指定安装路径。
    d、--cross-commpile-prefix指定交叉工具链。
    e、make之前査看Makefile文件,删除 -m64 -m32,因为编译器有32位和64位之分。

2.4、输出文件

编译成功后输出文件如下图所示:

至此,openssl库已经交叉编译结束。

2.5、报错记录

如果在 limuzx 下安装 gpenssl,执行 sonfig,和 make 之后,在执行 make install 时如果出现下面的错误:

ems.pod around line 457: Expected text after =item, not a number

ems.pod around line 461: Expected text after =item, not a number

ems.pod around line 465: Expected text after =item, not a number

ems.pod around line 470:Expected text after =item, not a number

ems.pod around line 474: Expected text after =item, not a number

POD document had syntax errors at /usr/bin/pod2man line 69.

解决方案:

则在 root 权限下,执行sudo rm -f /usr/bin/pod2man, 然后重新make install即可。

三、交叉编译paho.mqtt.c

3.1、源码下载地址

Releases · eclipse/paho.mqtt.c · GitHub

3.2、下载版本号

博主本次使用的版本号为:v1.3.9版本。

3.3、交叉编译步骤

3.3.1、解压并进入源码目录

tar -zxvf v1.3.9.tar.gz && cd paho.mqtt.c-1.3.9

3.3.2、修改Makefile

3.3.2.1、指定编译输出路径
3.3.2.2、指定交叉编译工具链
CC=/usr/local/arm-linux-toolchain/arm-nuvoton-linux_202402/bin/arm-linux-gcc
3.3.2.3、添加ssl库路径

此处的ssl路径即为第一章节编译产生的相关文件,例如博主的ssl的路径为:/home/vmware/workspace/test/openssl-1.0.2f/_install (此处以个人实际路径为准)

其相关最终修改情况如下所示:

CCFLAGS_SO += -Wno-deprecated-declarations -DOSX -I /home/vmware/workspace/test/openssl-1.0.2f/_install/include
LDFLAGS_C += -Wl,-install_name,lib$(MQTTLIB_C).so.${MAJOR_VERSION} -L /home/vmware/workspace/test/openssl-1.0.2f/_install/lib
LDFLAGS_CS += -Wl,-install_name,lib$(MQTTLIB_CS).so.${MAJOR_VERSION} -L /home/vmware/workspace/test/openssl-1.0.2f/_install/lib
LDFLAGS_A += -Wl,-install_name,lib${MQTTLIB_A}.so.${MAJOR_VERSION} -L /home/vmware/workspace/test/openssl-1.0.2f/_install/lib
LDFLAGS_AS += -Wl,-install_name,lib${MQTTLIB_AS}.so.${MAJOR_VERSION} -L /home/vmware/workspace/test/openssl-1.0.2f/_install/lib
FLAGS_EXE += -DOSX -L //home/vmware/workspace/test/openssl-1.0.2f/_install/lib
FLAGS_EXES += -L /home/vmware/workspace/test/openssl-1.0.2f/_install/lib
3.3.2.4、修改install和unistall

修改此项的目的是将paho.mqtt.c库安装到build/install目录下,其最终修改内容如下所示:

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 ${srcdir}/MQTTExportDeclarations.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 docs/MQTTClient/man/man3/* $(DESTDIR)${man3dir}
	- cp -f docs/MQTTAsync/man/man3/* $(DESTDIR)${man3dir}
	@echo ""
	@echo "make install finish"
	@echo ""

uninstall:
	rm -rf $(blddir_work)
	@echo ""
	@echo "make uninstall finish"
	@echo ""
3.3.2.5、添加CFLAGS和LDFLAGS

此处的相关路径即为第一章节编译产生的相关文件,例如博主的ssl的路径为:/home/vmware/workspace/test/openssl-1.0.2f/_install (此处以个人实际路径为准)

以下两行内容加在Makefile的159行之后即可。

CFLAGS += -I /home/vmware/workspace/test/openssl-1.0.2f/_install/include
LDFLAGS += -L /home/vmware/workspace/test/openssl-1.0.2f/_install/lib

3.3.3、编译与下载

make && make install

输出文件如下图所示:

至此,Linux 基于openssl库的paho.mqtt.c交叉编译完成。

相关推荐
_extraordinary_2 小时前
Linux基本指令(三)+ 权限
linux·运维·服务器
WalkingWithTheWind~2 小时前
Linux搭建Nginx直播流媒体服务RTMP/RTSP转Http-flv视频浏览器在线播放/Vue/Java/ffmpeg
java·linux·nginx·ffmpeg·vue·http-flv·rtsp
和舒貌4 小时前
Linux系统编程基础详解
linux·运维·服务器·基础
武汉唯众智创4 小时前
产科教贯通:如何赋能职业本科物联网创新人才培养体系?
物联网·人才培养
Jack魏5 小时前
Linux MySQL 8.0.29 忽略表名大小写配置
linux·mysql·mysql8·mysql常见问题
ctrigger5 小时前
AI回答:Linux C/C++编程学习路线
linux·c语言·c++
RFID舜识物联网6 小时前
RFID测温技术:电力设备安全监测的新利器
网络·人工智能·嵌入式硬件·物联网·安全
蛊明7 小时前
下载CentOS 10
linux·运维·centos
北京-宏哥7 小时前
Linux系统安装MySQL5.7(其他版本类似)避坑指南
linux·运维·服务器
Aphelios3807 小时前
Linux 下 VIM 编辑器学习记录:从基础到进阶(下)
java·linux·学习·编辑器·vim