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下载
2.2解压,创建库保存文件夹ssl_arm
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指定交叉编译工具链路径错误原因说明:①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-
2.4修改Makefile文件
①删除Makefile文件中的 -m64
sed -i ‘s/-m64//’ Makefile
有的版本makefile中需要查看编译器是否为arm-linux-gnueabihf- 不是的话要一一修改如gcc、ar、g++等等
②make&&make install编译生成相关库
编译安装完成后ssl_arm目录如下,即完成openssl交叉编译
三、paho-mqtt交叉编译移植
3.1 下载paho.mqtt.c-1.3.0源码
paho mqtt 官网地址:https://github.com/eclipse/paho.mqtt.c/releases
3.2 解压,修改makefile
①指定生成路径build/install/local
prefox = build/install/local (Makefile同级目录下build/install/local目录下)
②指定交叉编译工具链
CC = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
③添加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
④修改install和uninstall
目的是将paho-mqtt.c的库安装到build/install/local目录下
install: build
mkdir -p (DESTDIR)(DESTDIR)(DESTDIR)(PREFIX)${includedir}
mkdir -p (DESTDIR)(DESTDIR)(DESTDIR)(PREFIX)${libdir}
mkdir -p (DESTDIR)(DESTDIR)(DESTDIR)(PREFIX)${bindir}
mkdir -p (DESTDIR)(DESTDIR)(DESTDIR){man1dir}
mkdir -p (DESTDIR)(DESTDIR)(DESTDIR){man3dir}
cp -f ${MQTTLIB_C_TARGET} (DESTDIR)(DESTDIR)(DESTDIR){libdir}
cp -f ${MQTTLIB_CS_TARGET} (DESTDIR)(DESTDIR)(DESTDIR){libdir}
cp -f ${MQTTLIB_A_TARGET} (DESTDIR)(DESTDIR)(DESTDIR){libdir}
cp -f ${MQTTLIB_AS_TARGET} (DESTDIR)(DESTDIR)(DESTDIR){libdir}
cp -f ${MQTTVERSION_TARGET} (DESTDIR)(DESTDIR)(DESTDIR){bindir}
cp -f ${PAHO_C_PUB_TARGET} (DESTDIR)(DESTDIR)(DESTDIR){bindir}
cp -f ${PAHO_C_SUB_TARGET} (DESTDIR)(DESTDIR)(DESTDIR){bindir}
cp -f ${PAHO_CS_PUB_TARGET} (DESTDIR)(DESTDIR)(DESTDIR){bindir}
cp -f ${PAHO_CS_SUB_TARGET} (DESTDIR)(DESTDIR)(DESTDIR){bindir}
ln -sf lib(MQTTLIBC).so.(MQTTLIB_C).so.(MQTTLIBC).so.{MAJOR_VERSION} (DESTDIR)(DESTDIR)(DESTDIR){libdir}/lib(MQTTLIBC).soln−sflib(MQTTLIB_C).so ln -sf lib(MQTTLIBC).soln−sflib(MQTTLIB_CS).so.${MAJOR_VERSION} (DESTDIR)(DESTDIR)(DESTDIR){libdir}/lib(MQTTLIBCS).soln−sflib(MQTTLIB_CS).so ln -sf lib(MQTTLIBCS).soln−sflib(MQTTLIB_A).so.${MAJOR_VERSION} (DESTDIR)(DESTDIR)(DESTDIR){libdir}/lib(MQTTLIBA).soln−sflib(MQTTLIB_A).so ln -sf lib(MQTTLIBA).soln−sflib(MQTTLIB_AS).so.${MAJOR_VERSION} (DESTDIR)(DESTDIR)(DESTDIR){libdir}/lib(MQTTLIBAS).soln−sflib(MQTTLIB_AS).so ln -sf lib(MQTTLIBAS).soln−sflib(MQTTLIB_C).so.${VERSION} (DESTDIR)(DESTDIR)(DESTDIR){libdir}/lib(MQTTLIBC).so.(MQTTLIB_C).so.(MQTTLIBC).so.{MAJOR_VERSION}
ln -sf lib(MQTTLIBCS).so.(MQTTLIB_CS).so.(MQTTLIBCS).so.{VERSION} (DESTDIR)(DESTDIR)(DESTDIR){libdir}/lib(MQTTLIBCS).so.(MQTTLIB_CS).so.(MQTTLIBCS).so.{MAJOR_VERSION}
ln -sf lib(MQTTLIBA).so.(MQTTLIB_A).so.(MQTTLIBA).so.{VERSION} (DESTDIR)(DESTDIR)(DESTDIR){libdir}/lib(MQTTLIBA).so.(MQTTLIB_A).so.(MQTTLIBA).so.{MAJOR_VERSION}
ln -sf lib(MQTTLIBAS).so.(MQTTLIB_AS).so.(MQTTLIBAS).so.{VERSION} (DESTDIR)(DESTDIR)(DESTDIR){libdir}/lib(MQTTLIBAS).so.(MQTTLIB_AS).so.(MQTTLIBAS).so.{MAJOR_VERSION}
cp -f ${srcdir}/MQTTAsync.h (DESTDIR)(DESTDIR)(DESTDIR){includedir}
cp -f ${srcdir}/MQTTClient.h (DESTDIR)(DESTDIR)(DESTDIR){includedir}
cp -f ${srcdir}/MQTTClientPersistence.h (DESTDIR)(DESTDIR)(DESTDIR){includedir}
cp -f ${srcdir}/MQTTProperties.h (DESTDIR)(DESTDIR)(DESTDIR){includedir}
cp -f ${srcdir}/MQTTReasonCodes.h (DESTDIR)(DESTDIR)(DESTDIR){includedir}
cp -f ${srcdir}/MQTTSubscribeOpts.h (DESTDIR)(DESTDIR)(DESTDIR){includedir}
- cp -f doc/man/man1/paho_c_pub.1 (DESTDIR)(DESTDIR)(DESTDIR){man1dir}
- cp -f doc/man/man1/paho_c_sub.1 (DESTDIR)(DESTDIR)(DESTDIR){man1dir}
- cp -f doc/man/man1/paho_cs_pub.1 (DESTDIR)(DESTDIR)(DESTDIR){man1dir}
- cp -f doc/man/man1/paho_cs_sub.1 (DESTDIR)(DESTDIR)(DESTDIR){man1dir}
- cp -f ${blddir}/doc/MQTTClient/man/man3/MQTTClient.h.3 (DESTDIR)(DESTDIR)(DESTDIR){man3dir}
- cp -f ${blddir}/doc/MQTTAsync/man/man3/MQTTAsync.h.3 (DESTDIR)(DESTDIR)(DESTDIR){man3dir}
@echo “”
@echo “make install finish”, date
@echo “”
uninstall:
rm -rf $(blddir_work)
@echo “”
@echo “make uninstall finish”, date
@echo “”
3.3修改完Makefile后make&& make install 生成库
编译安装成功后会生成以下库,至此paho-mqtt 移植交叉编译成功
ubuntu交叉编译移植paho-mqtt-c相关推荐
- STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云
STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 目录 STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 一 ...
- paho.mqtt.c开源代码的ARM移植
paho.mqtt.c开源代码的ARM移植 1.环境及背景 2.开源资源下载 3.编译过程 3.1编译OpenSSL 3.2编译paho.mqtt.c 1.环境及背景 CSDN上关于paho.mqtt ...
- openssl paho.mqtt交叉编译
Openssl移植到ARM开发板 https://blog.csdn.net/lingyuncao/article/details/90667781 ./config no-asm -shared ...
- linux im6q交叉编译paho.mqtt.c
工具链问题 本来编译一下paho应该是没大问题的,反倒是cortexa9hf-vfp-neon-poky-linux-gnueabi这个工具链使用上出问题了 从开发板开发那边拿到的或者直接从nxp社区 ...
- BC20/BC26-opencpu移植cjson,mqtt等注意事项
如今芯片慌,单片机涨价的厉害,移远的BC20/BC26等模组的opencpu方案节省MCU,提供计算力的服务.还是很节省成本的. 但是使用模组移植一些标准的开源库的时候就会遇到,编译出错.经过 ...
- OpenCV开发笔记(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/123696821 各位读者,知识无穷而人力有穷 ...
- Paho mqtt C语言库介绍
目录 Paho库目录文件介绍 Paho库常用函数介绍 MQTTConnectClient中的常用函数 MQTTConnectServer中的常用函数 MQTTDeserializePublish中的常 ...
- paho架构_GitHub - yanzhangfeng/paho-mqtt: Eclipse Paho MQTT C/C++ client for Embedded platforms
paho-mqtt 1.介绍 Paho MQTT 是 Eclipse 实现的基于 MQTT 协议的客户端,本软件包是在 Eclipse paho-mqtt 源码包的基础上设计的一套 MQTT 客户端程 ...
- cmake:VS2015和GCC编译paho.mqtt C/C++ client
paho.mqtt.c是eclipse开发的C语言跨平台mqtt client 开源库,paho.mqtt.cpp是对应的C++ Client,paho.mqtt支持CMAKE编译,本文以脚本形式提供 ...
最新文章
- 【数组】Find Peak Element
- windows10大瘦身 - Lync录屏的临时文件夹清理
- @MySQL的存储引擎
- mysql的分片系统_MySQL分片
- 熊仔科技Steamduino PIC18F46J50主控板 部分原理图
- [C# 网络编程系列]专题十二:实现一个简单的FTP服务器
- Android 获得ImageView中Image的绘制大小
- 科大讯飞2017年报:营收54亿利润5.9亿,政府补助1.18亿
- 【lol版】2022年最新Java学习路线图(来自动力节点)
- react函数式组件传值之子传父
- j1900适合装哪版群晖_NAS部署指南 群晖篇六—— NAS兼做路由器,群晖虚拟机套件教程...
- 自动化的机器学习:5个常用AutoML 框架介绍
- 南京软件企业挨个介绍及计算机学习的一点经验交流
- 【2020新书推荐】程序员值得一读的机器学习新书
- 硬盘数据传到计算机,如何把旧电脑硬盘上的数据复制传输到新电脑上
- 转-快找个程序员做老公吧
- CCCF精选 | 李德毅:机器如何像人一样认知——机器的生命观
- MySQL外键约束(FOREIGN KEY)是什么?
- 嵌入式工程师面试知识总结
- numpy ndarray嵌套ndarray浅显理解
热门文章
- 【Java】自定义泛型类
- 数据分析软件选Tableau 和 Power BI,不不不,我选FineBI,一个被雪藏的利器。
- android极光静默推送,Android 推送 整合小米、个推、jpush
- Insert into select 锁表
- URL编码解码以及常见压缩算法和加密
- linux 符号执行,基于程序切片的符号执行,Symbolic execution based on program slicing,音标,读音,翻译,英文例句,英语词典...
- 信息学奥赛一本通 1366:二叉树输出(btout)
- day11C语言递归
- 平均工资1.2w,UI凭什么在设计行业最吃香,你对UI行业了解多少?
- 分手只为更好!Keras正式从TensorFlow分离