首页 > 其他分享 >交叉编译 MQTT 库

交叉编译 MQTT 库

时间:2024-09-14 12:51:14浏览次数:3  
标签:CMAKE 交叉 openssl 编译 MQTT arm 客户端

一.编译 openssl 库

1.原因
  • 因为 MQTT 客户端库依赖于 openssl 库,所以通常在移植 MQTT 客户端库的时候,需要先移植 openssl、交叉编译 openssl 得到链接库文件以及头文件,然后再来编译 MQTT 客户端库。
2.交叉编译 openssl 库流程
2.1下载
  • 首先在官网上下载 openssl 源码,官网地址:https://www.openssl.org/source/
2.2配置和编译
  • 下载完后进入顶层目录配置,执行如下命令:
./config no-asm shared no-async --prefix=/home/xiaoke/tools/openssl --cross-compile-prefix=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
  • 然后再修改顶层 Makefile,进行如下操作:

在这里插入图片描述

  • 最后在执行下面命令即可编译成功,如果失败可以试试换个更低的版本
make
make install
3.交叉编译过程中我遇到的问题
  • 交叉编译高版本的 openssl 库会失败,不知道是什么原因,但是降低 openssl 库的版本再次编译就就不会报错

二.编译 MQTT 客户端库

1.交叉编译 MQTT 客户端库流程
1.1下载
  • 首先我们进入到 MQTT 的官网下载 MQTT 客户端库源码包,官网地址:https://mqtt.org/

在这里插入图片描述

  • 这里有多种不同的 MQTT C 客户端库,推荐大家使用第一个 Eclipse Paho C,这是一个“MQTT C Client for Posix and Windows”,Paho MQTT C 客户端库是用 ANSI 标准 C 编写的功能齐全的 MQTT 客户端库,可运行在 Linux 系统下,支持 MQTT3.1、 MQTT3.1.1、MQTT5.0 。

在这里插入图片描述

  • 往下翻找到 source 就可以下载源码。

在这里插入图片描述

2.2配置和编译
  • 下载完后进入顶层目录,在 cmake 目录下新建一个 toolchain.cmake 文件,内容如下:
# 指定目标系统
set(CMAKE_SYSTEM_NAME Linux)
# 指定目标平台
set(CMAKE_SYSTEM_PROCESSOR arm)
# 指定交叉编译工具链的根路径
set(CROSS_CHAIN_PATH /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf)
# 指定C编译器
set(CMAKE_C_COMPILER ${CROSS_CHAIN_PATH}/bin/arm-linux-gnueabihf-gcc)
# 指定C++编译器
set(CMAKE_CXX_COMPILER ${CROSS_CHAIN_PATH}/bin/arm-linux-gnueabihf-g++)
# 指定安装目录
SET(CMAKE_INSTALL_PREFIX /home/xiaoke/tools/mqtt)
# 指定openssl库
SET(OPENSSL_ROOT_DIR /home/xiaoke/tools/openssl)
SET(OPENSSL_LIBRARIES /home/xiaoke/tools/openssl/lib)
SET(OPENSSL_INCLUDE_DIR /home/xiaoke/tools/openssl/include)
# 设置cmake版本
SET(CMAKE_SYSTEM_VERSION 1)
  • 然后再在顶层目录下新建一个 build.sh 脚本,内容如下:
#!/bin/sh
mkdir build
cd build
cmake .. \
-DPAHO_WITH_SSL=TRUE \
-DPAHO_BUILD_SAMPLES=TRUE \
-DCMAKE_TOOLCHAIN_FILE=./cmake/toolchain.cmake
make -j8
make install
  • 执行脚本,等到脚本执行完成,就交叉编译完成了。

标签:CMAKE,交叉,openssl,编译,MQTT,arm,客户端
From: https://blog.csdn.net/m0_74034587/article/details/142237159

相关文章

  • modbus调试助手/mqtt调试工具/超轻巧物联网组件/多线程实时采集/各种协议支持
    一、前言说明搞物联网开发很多年,用的最多的当属modbus协议,一个稳定好用的物联网组件是物联网平台持续运行多年的基石,所以这个物联网组件从一开始就定位于自研,为了满足各种场景的需求,当然最重要的一点就是大大提升了自己对该协议的深度理解和应用,尤其是面对各种场景需求,逐步调整迭......
  • C语言 ——— 学习并使用 #if …… #endif 条件编译指令
    目录何为条件编译指令常见的条件编译指令学习条件编译指令使用条件编译指令在程序预编译阶段,条件编译指令的代码转换多分支的条件编译指令何为条件编译指令在编译一个程序的时候,如果要将一条语句(一组语句)选择编译或者放弃时,就使用条件编译指令常见的条件编译指令#i......
  • C语言 ——— 条件编译指令实际用途
    目录前言头文件被包含的方式嵌套文件包含使用条件编译指令规避头文件多次包含 还有一个编译指令,同样能做到以上功能 前言条件编译指令多用于对头文件的定义和判断以及删除头文件被包含的方式本地文件包含(也就是自己创建的头文件):#include"stdio.h"本地文件包......
  • 【IPV6从入门到起飞】5-2 IPV6+Home Assistant(ESP32+MQTT+DHT11+BH1750)传感器采集上
    IPV6+HomeAssistant[ESP32+MQTT+DHT11+BH1750]传感器采集上传监测1背景2实现效果3HomeAssistant配置3-1MQTT配置3-2yaml配置3-3加载配置4ESP32搭建4-1开发环境4-2工程代码5实现效果1背景在上一小节【IPV6从入门到起飞】5-1IPV6+HomeAssistant(搭建......
  • 《ESP32从0到1》之MQTT与阿里iot通信(中)
    文章目录文章内容硬件增加定时器,实现定时发布MQTT主题移植smart_config程序最终程序逻辑运行测试保存ssid和password上电自动配网最终运行测试补充说明欢迎关注并留言文章内容基于MQTT->tcp结合wifi->smart_config示例工程,读懂程序,最终实现MQTT与阿里iot平台通信。......
  • Centos7编译安装LNMP和搭建WordPress网站
    步骤1:安装依赖包 yum-yinstallgcc-c++&&yuminstall-ypcrepcre-devel&&yuminstall-yzlibzlib-devel&&yuminstall-yopensslopenssl-devel步骤2:编译安装nginx1.下载nginxwgethttp://nginx.org/download/nginx-1.26.2.tar.gz2.解压......
  • AnolisOS-7.9编译升级安装 OpenSSH_9.8p1+OpenSSL 3.3.0+zlib1.3.1
     实验镜像AnolisOS-7.9-QU1-x86_64-dvd.iso安装过程内核选择3.x #安装必备和常用软件包#安装相关的依赖项,如有遗漏再次安装yuminstall-y perl-IPC-Cmdvimmakegccwgettarlrzsznet-tools #安装zlib./configure--prefix=/usr/local/zlibmake&&makei......
  • ubuntu-22.04.4编译升级安装 OpenSSH_9.8p1+OpenSSL 3.3.2+zlib1.3.1
     实验镜像ubuntu-22.04.4-live-server-amd64.iso#安装必备和常用软件包#安装相关的依赖项,如有遗漏再次安装aptinstall-y libz-devvimgccwgettarlrzsznanomakenet-tools #安装zlib./configure--prefix=/usr/local/zlibmake&&makeinstall #安装......
  • 一分钟在线编译定制专属固件: openwrt.ai
    https://github.com/kiddin9/Kwrt?tab=readme-ov-file  KwrtPublic Watch96Fork 3k Star 7.4k kiddin9/Kwrt   master1 Branch0 TagstAddfileAddfile CodeFoldersandfilesName  ......
  • [C语言] 14--编译器、宏定义和头文件
    1.编译器概念:编译器是一个用来帮助我们把原码.c翻译成计算机能够直接识别的二进制编码。使用不同的编译器可以翻译出来不同机器的二进制编码。gcc编译器:gcchello.c-ohellogcc-->C语言编译器hello.c-->需要编译的原码-o-->指定输出文件名hello-->可执行文件的......