ubuntu交叉编译移植paho-mqtt-c

交叉编译移植paho-mqtt-c库

一、环境说明

近期项目需求,在imx6ull上集成MQTT通讯,准备在ubuntu16.04上通过交叉编译工具链arm-linux-guneabihf- (linaro)编译出.so库,paho-mqtt库依赖于ssl库,所以整个交叉编译移植分为两部分,首先是openssl的移植,生成相应的ssl库,然后移植paho-mqtt生成mqtt通讯库。

二、openssl交叉编译

2.1openssl下载

在这里插入图片描述ubuntu交叉编译移植paho-mqtt-c_第1张图片

2.2解压,创建库保存文件夹ssl_arm

ubuntu交叉编译移植paho-mqtt-c_第2张图片

2.3 配置openssl源码生成Makefile文件

./config no-async no-asm shared --prefix=/home/szc/tools/openssl_arm/ssl_arm --cross-compile-prefix=arm-linux-gnueabihf-
说明: no-async 作用是不使用ucontext库 no-asm不使用汇编代码 shared 配置为生成动态库
–prefix用于指定 install 安装路径 --cross-compile-prefix指定交叉编译工具链路径ubuntu交叉编译移植paho-mqtt-c_第3张图片错误原因说明:①perl切换为en_US.UTF-8 ②切换为root权限
sudo ./config no-async no-asm shared --prefix=/home/szc/tools/openssl_arm/ssl_arm --cross-compile-prefix=arm-linux-gnueabihf-
ubuntu交叉编译移植paho-mqtt-c_第4张图片

2.4修改Makefile文件

①删除Makefile文件中的 -m64
sed -i ‘s/-m64//’ Makefile
有的版本makefile中需要查看编译器是否为arm-linux-gnueabihf- 不是的话要一一修改如gcc、ar、g++等等
②make&&make install编译生成相关库
ubuntu交叉编译移植paho-mqtt-c_第5张图片
ubuntu交叉编译移植paho-mqtt-c_第6张图片
编译安装完成后ssl_arm目录如下,即完成openssl交叉编译
在这里插入图片描述

三、paho-mqtt交叉编译移植

3.1 下载paho.mqtt.c-1.3.0源码

paho mqtt 官网地址:https://github.com/eclipse/paho.mqtt.c/releases
ubuntu交叉编译移植paho-mqtt-c_第7张图片

3.2 解压,修改makefile

①指定生成路径build/install/local
prefox = build/install/local (Makefile同级目录下build/install/local目录下)
ubuntu交叉编译移植paho-mqtt-c_第8张图片
②指定交叉编译工具链
CC = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
ubuntu交叉编译移植paho-mqtt-c_第9张图片
③添加ssl库路径
CCFLAGS_SO += -I /home/szc/tools/openssl_arm/ssl_arm/include
LDFLAGS_C += -L /home/szc/tools/openssl_arm/ssl_arm/lib
LDFLAGS_CS += -L /home/szc/tools/openssl_arm/ssl_arm/lib
LDFLAGS_A += -L /home/szc/tools/openssl_arm/ssl_arm/lib
LDFLAGS_AS += -L /home/szc/tools/openssl_arm/ssl_arm/lib
FLAGS_EXE += -L /home/szc/tools/openssl_arm/ssl_arm/lib
FLAGS_EXES += -L /home/szc/tools/openssl_arm/ssl_arm/lib
ubuntu交叉编译移植paho-mqtt-c_第10张图片
④修改install和uninstall
目的是将paho-mqtt.c的库安装到build/install/local目录下
install: build
mkdir -p ( D E S T D I R ) (DESTDIR) (DESTDIR)(PREFIX)${includedir}
mkdir -p ( D E S T D I R ) (DESTDIR) (DESTDIR)(PREFIX)${libdir}
mkdir -p ( D E S T D I R ) (DESTDIR) (DESTDIR)(PREFIX)${bindir}
mkdir -p ( D E S T D I R ) (DESTDIR) (DESTDIR){man1dir}
mkdir -p ( D E S T D I R ) (DESTDIR) (DESTDIR){man3dir}
cp -f ${MQTTLIB_C_TARGET} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}
cp -f ${MQTTLIB_CS_TARGET} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}
cp -f ${MQTTLIB_A_TARGET} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}
cp -f ${MQTTLIB_AS_TARGET} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}
cp -f ${MQTTVERSION_TARGET} ( D E S T D I R ) (DESTDIR) (DESTDIR){bindir}
cp -f ${PAHO_C_PUB_TARGET} ( D E S T D I R ) (DESTDIR) (DESTDIR){bindir}
cp -f ${PAHO_C_SUB_TARGET} ( D E S T D I R ) (DESTDIR) (DESTDIR){bindir}
cp -f ${PAHO_CS_PUB_TARGET} ( D E S T D I R ) (DESTDIR) (DESTDIR){bindir}
cp -f ${PAHO_CS_SUB_TARGET} ( D E S T D I R ) (DESTDIR) (DESTDIR){bindir}
ln -sf lib ( M Q T T L I B C ) . s o . (MQTTLIB_C).so. (MQTTLIBC).so.{MAJOR_VERSION} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}/lib ( M Q T T L I B C ) . s o l n − s f l i b (MQTTLIB_C).so ln -sf lib (MQTTLIBC).solnsflib(MQTTLIB_CS).so.${MAJOR_VERSION} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}/lib ( M Q T T L I B C S ) . s o l n − s f l i b (MQTTLIB_CS).so ln -sf lib (MQTTLIBCS).solnsflib(MQTTLIB_A).so.${MAJOR_VERSION} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}/lib ( M Q T T L I B A ) . s o l n − s f l i b (MQTTLIB_A).so ln -sf lib (MQTTLIBA).solnsflib(MQTTLIB_AS).so.${MAJOR_VERSION} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}/lib ( M Q T T L I B A S ) . s o l n − s f l i b (MQTTLIB_AS).so ln -sf lib (MQTTLIBAS).solnsflib(MQTTLIB_C).so.${VERSION} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}/lib ( M Q T T L I B C ) . s o . (MQTTLIB_C).so. (MQTTLIBC).so.{MAJOR_VERSION}
ln -sf lib ( M Q T T L I B C S ) . s o . (MQTTLIB_CS).so. (MQTTLIBCS).so.{VERSION} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}/lib ( M Q T T L I B C S ) . s o . (MQTTLIB_CS).so. (MQTTLIBCS).so.{MAJOR_VERSION}
ln -sf lib ( M Q T T L I B A ) . s o . (MQTTLIB_A).so. (MQTTLIBA).so.{VERSION} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}/lib ( M Q T T L I B A ) . s o . (MQTTLIB_A).so. (MQTTLIBA).so.{MAJOR_VERSION}
ln -sf lib ( M Q T T L I B A S ) . s o . (MQTTLIB_AS).so. (MQTTLIBAS).so.{VERSION} ( D E S T D I R ) (DESTDIR) (DESTDIR){libdir}/lib ( M Q T T L I B A S ) . s o . (MQTTLIB_AS).so. (MQTTLIBAS).so.{MAJOR_VERSION}
cp -f ${srcdir}/MQTTAsync.h ( D E S T D I R ) (DESTDIR) (DESTDIR){includedir}
cp -f ${srcdir}/MQTTClient.h ( D E S T D I R ) (DESTDIR) (DESTDIR){includedir}
cp -f ${srcdir}/MQTTClientPersistence.h ( D E S T D I R ) (DESTDIR) (DESTDIR){includedir}
cp -f ${srcdir}/MQTTProperties.h ( D E S T D I R ) (DESTDIR) (DESTDIR){includedir}
cp -f ${srcdir}/MQTTReasonCodes.h ( D E S T D I R ) (DESTDIR) (DESTDIR){includedir}
cp -f ${srcdir}/MQTTSubscribeOpts.h ( D E S T D I R ) (DESTDIR) (DESTDIR){includedir}
- cp -f doc/man/man1/paho_c_pub.1 ( D E S T D I R ) (DESTDIR) (DESTDIR){man1dir}
- cp -f doc/man/man1/paho_c_sub.1 ( D E S T D I R ) (DESTDIR) (DESTDIR){man1dir}
- cp -f doc/man/man1/paho_cs_pub.1 ( D E S T D I R ) (DESTDIR) (DESTDIR){man1dir}
- cp -f doc/man/man1/paho_cs_sub.1 ( D E S T D I R ) (DESTDIR) (DESTDIR){man1dir}
- cp -f ${blddir}/doc/MQTTClient/man/man3/MQTTClient.h.3 ( D E S T D I R ) (DESTDIR) (DESTDIR){man3dir}
- cp -f ${blddir}/doc/MQTTAsync/man/man3/MQTTAsync.h.3 ( D E S T D I R ) (DESTDIR) (DESTDIR){man3dir}
@echo “”
@echo “make install finish”, date
@echo “”
uninstall:
rm -rf $(blddir_work)
@echo “”
@echo “make uninstall finish”, date
@echo “”
ubuntu交叉编译移植paho-mqtt-c_第11张图片

3.3修改完Makefile后make&& make install 生成库

ubuntu交叉编译移植paho-mqtt-c_第12张图片
编译安装成功后会生成以下库,至此paho-mqtt 移植交叉编译成功
ubuntu交叉编译移植paho-mqtt-c_第13张图片

你可能感兴趣的:(ubuntu,c语言,linux)