交叉编译 MQTT 库

一.编译 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
  • 执行脚本,等到脚本执行完成,就交叉编译完成了。
编译MQTT的ARM需要进行以下步骤: 1. 准备交叉编译环境:ARM架构的需要在x86或者其他不同架构的主机上进行交叉编译。首先需要安装交叉编译工具链,例如arm-none-eabi-gcc。可以通过在命令行中运行"sudo apt-get install gcc-arm-none-eabi"来安装。 2. 下载MQTT的源代码:在MQTT的官方网站上下载最新的源代码包,解压到本地目录中。 3. 配置编译参数:在源代码目录中,运行"make"命令来配置编译参数。可以使用"-e"选项来指定编译器和相关工具链的路径,例如:"make -e CC=/path/to/arm-none-eabi-gcc"。 4. 编译并生成文件:运行"make"命令开始编译。编译过程中会生成文件和相关的依赖文件。编译完成后,会在源代码目录中生成一个名为"output"的文件夹,其中包含编译生成的文件。 5. 传输文件到ARM设备:将生成的文件传输到目标ARM设备上。可以使用scp命令将文件从本地主机上传到ARM设备上,例如:"scp libmqtt.so username@hostname:/path/to/target/device"。 6. 在ARM设备上使用文件:在ARM设备上使用文件时,需要将文件路径添加到编译器的搜索路径中。可以通过在编译命令中添加"-L"选项来指定文件的搜索路径,例如:"gcc -L/path/to/library -o program program.c -lmqtt"。 通过以上步骤,你就可以成功地编译出MQTT的ARM,并在ARM设备上使用了。请注意,具体的编译步骤可能因使用的工具链和文件版本的不同而有所差异,需要根据实际情况进行相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值