移植 Paho MQTT

1. 准备工作

1.1. 下载源码

两种方式下载源码:

  1. git clone
  2. 直接下载指定 tag 源码

对于第 1 种方式,会把历史 commit 都 clone 下来,对于立项久远、社区活跃的项目来说,体积较大,加之 github 在国内访问不稳定,而且只是使用不是开发,所以这里选择第 2 种方式。

在其项目 Release 页找到最新的 Release Tag,下载 Source code

1.2. 安装依赖

1
apt install build-essential gcc make cmake cmake-gui cmake-curses-gui

如果需要使用 SSL 功能,则还需要预先交叉编译 OpenSSL,可参考之前的文章 移植 OpenSSL

如果需要生成文档,还需要安装 doxygengraphhviz

1
apt install doxygen graphviz

2. 配置 Makefile

2.1. 修改交叉编译工具链

新建一个目录作为编译用目录,拷贝 paho.mqtt 源码目录下 cmake 目录内的 toolchain.linux-arm11.cmake 至编译用目录,修改以下内容为自己的交叉编译工具链:

1
SET(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)

2.2. 生成 Makefile

1
2
3
4
5
6
7
8
cmake \
-DPAHO_WITH_SSL=TRUE \
-DPAHO_BUILD_SAMPLES=TRUE \
-DPAHO_BUILD_DOCUMENTATION=TRUE \
-DPAHO_HIGH_PERFORMANCE=TRUE \
-DOPENSSL_ROOT_DIR=/path/to/openssl/install/root \
-DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain.linux-arm11.cmake \
/path/to/paho.mqtt.c/source
参数 默认值 描述
PAHO_BUILD_SHARED TRUE 编译成共享库
PAHO_BUILD_STATIC FALSE 编译成静态库
PAHO_HIGH_PERFORMANCE FALSE 高性能模式,如果设为 TRUE 则编译时 debug 追踪等功能将会被排除
PAHO_WITH_SSL FALSE 开启 SSL 功能
OPENSSL_ROOT_DIR “” OpenSSL 安装目录
PAHO_BUILD_DOCUMENTATION FALSE 生成文档
PAHO_BUILD_SAMPLES FALSE 编译示例

如果 OPENSSL_ROOT_DIR 目录内含有共享库,那么编译完成的 paho.mqtt 共享库需要依赖 OpenSSL 的共享库。

3. 编译

1
make

如果遇到 ld: cannot find -lanl 的错误,则需要在源码目录下,找到 src/CMakeLists.txt,将其中的以下内容注释(使用 # 注释):

1
2
3
4
FIND_LIBRARY(LIB_ANL anl)
IF(LIB_ANL)
    SET(LIBS_SYSTEM "${LIBS_SYSTEM}" anl)
ENDIF()

然后重新生成一次 Makefile。原因是 libanl 只支持 glibc

3.1. 打包(可选)

1
make package
本博客所有文章除特别声明外,均采用 BY-NC-SA 4.0 许可协议。转载请注明出处!
最后更新于 2023/06/21 14:42 CST
使用 Hugo 构建
主题 StackJimmy 设计