一.编译 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-
最后在执行下面命令即可编译成功,如果失败可以试试换个更低的版本
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 。
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)
set( CMAKE_C_COMPILER ${CROSS_CHAIN_PATH} /bin/arm-linux-gnueabihf-gcc)
set( CMAKE_CXX_COMPILER ${CROSS_CHAIN_PATH} /bin/arm-linux-gnueabihf-g++)
SET( CMAKE_INSTALL_PREFIX /home/xiaoke/tools/mqtt)
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)
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