交叉编译移植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(MQTTLIBC​S).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(MQTTLIBA​S).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.(MQTTLIBC​S).so.{VERSION} (DESTDIR)(DESTDIR)(DESTDIR){libdir}/lib(MQTTLIBCS).so.(MQTTLIB_CS).so.(MQTTLIBC​S).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.(MQTTLIBA​S).so.{VERSION} (DESTDIR)(DESTDIR)(DESTDIR){libdir}/lib(MQTTLIBAS).so.(MQTTLIB_AS).so.(MQTTLIBA​S).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相关推荐

  1. STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云

    STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 目录 STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 一 ...

  2. paho.mqtt.c开源代码的ARM移植

    paho.mqtt.c开源代码的ARM移植 1.环境及背景 2.开源资源下载 3.编译过程 3.1编译OpenSSL 3.2编译paho.mqtt.c 1.环境及背景 CSDN上关于paho.mqtt ...

  3. openssl paho.mqtt交叉编译

    Openssl移植到ARM开发板  https://blog.csdn.net/lingyuncao/article/details/90667781 ./config no-asm -shared ...

  4. linux im6q交叉编译paho.mqtt.c

    工具链问题 本来编译一下paho应该是没大问题的,反倒是cortexa9hf-vfp-neon-poky-linux-gnueabi这个工具链使用上出问题了 从开发板开发那边拿到的或者直接从nxp社区 ...

  5. BC20/BC26-opencpu移植cjson,mqtt等注意事项

      如今芯片慌,单片机涨价的厉害,移远的BC20/BC26等模组的opencpu方案节省MCU,提供计算力的服务.还是很节省成本的.   但是使用模组移植一些标准的开源库的时候就会遇到,编译出错.经过 ...

  6. OpenCV开发笔记(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/123696821 各位读者,知识无穷而人力有穷 ...

  7. Paho mqtt C语言库介绍

    目录 Paho库目录文件介绍 Paho库常用函数介绍 MQTTConnectClient中的常用函数 MQTTConnectServer中的常用函数 MQTTDeserializePublish中的常 ...

  8. 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 客户端程 ...

  9. cmake:VS2015和GCC编译paho.mqtt C/C++ client

    paho.mqtt.c是eclipse开发的C语言跨平台mqtt client 开源库,paho.mqtt.cpp是对应的C++ Client,paho.mqtt支持CMAKE编译,本文以脚本形式提供 ...

最新文章

  1. 【数组】Find Peak Element
  2. windows10大瘦身 - Lync录屏的临时文件夹清理
  3. @MySQL的存储引擎
  4. mysql的分片系统_MySQL分片
  5. 熊仔科技Steamduino PIC18F46J50主控板 部分原理图
  6. [C# 网络编程系列]专题十二:实现一个简单的FTP服务器
  7. Android 获得ImageView中Image的绘制大小
  8. 科大讯飞2017年报:营收54亿利润5.9亿,政府补助1.18亿
  9. 【lol版】2022年最新Java学习路线图(来自动力节点)
  10. react函数式组件传值之子传父
  11. j1900适合装哪版群晖_NAS部署指南 群晖篇六—— NAS兼做路由器,群晖虚拟机套件教程...
  12. 自动化的机器学习:5个常用AutoML 框架介绍
  13. 南京软件企业挨个介绍及计算机学习的一点经验交流
  14. 【2020新书推荐】程序员值得一读的机器学习新书
  15. 硬盘数据传到计算机,如何把旧电脑硬盘上的数据复制传输到新电脑上
  16. 转-快找个程序员做老公吧
  17. CCCF精选 | 李德毅:机器如何像人一样认知——机器的生命观
  18. MySQL外键约束(FOREIGN KEY)是什么?
  19. 嵌入式工程师面试知识总结
  20. numpy ndarray嵌套ndarray浅显理解

热门文章

  1. 【Java】自定义泛型类
  2. 数据分析软件选Tableau 和 Power BI,不不不,我选FineBI,一个被雪藏的利器。
  3. android极光静默推送,Android 推送 整合小米、个推、jpush
  4. Insert into select 锁表
  5. URL编码解码以及常见压缩算法和加密
  6. linux 符号执行,基于程序切片的符号执行,Symbolic execution based on program slicing,音标,读音,翻译,英文例句,英语词典...
  7. 信息学奥赛一本通 1366:二叉树输出(btout)
  8. day11C语言递归
  9. 平均工资1.2w,UI凭什么在设计行业最吃香,你对UI行业了解多少?
  10. 分手只为更好!Keras正式从TensorFlow分离