Eclipse Paho MQTT 客户端使用介绍
一、paho mqtt客户端下载及编译
客户端源码下载地址:https://github.com/eclipse/paho.mqtt.c
paho的mqtt源码是用cmake构建的,编译源码之前需要先了解一下cmake、makefile、ninja。对makefile应该比较熟悉,构建代码工程常常用到,用make可以解释执行makefile定义的规则和语法。ninja和make一样,也可是用来构建系统工程,ninja可以解释build.ninja文件。可以理解为ninja相当于make,build.ninja相当于makefile。ninja相对于make来说速度更快,但是功能没有make强大。cmake也是个构建系统的工具,它是用来生成makefile或则build.ninja文件的,最后还是要通过make或在ninja命令编译。只不过cmake的语法相对于makefile和ninja来说更加通俗易懂,更容易上手。还有一个类似cmake的工具,就是meson,meson的语法比cmake还要容易上手,只不过meson只能生成build.ninja。
1.1 gcc编译源码(makefile方式)
github上给了很多编译参数,这里使用默认参数
1、在源码目录下新建build目录存放cmake生成的中间文件
2、进入build目录执行 cmake ../
cmake构建完成后可以看到在build目录下生成了很多cmake相关的中间文件和一个Makefile文件。
3、执行 make package 编译并生成安装包
编译完成后,会在build目录下生成Eclipse-Paho-MQTT-C-1.3.12-Linux.tar.gz压缩文件,这文件里面有库文件和头文件等。
1.2 gcc编译源码(ninja方式)
如果要用ninja方式编译源码只要要将1.1中的步骤2中的make ../ 命令改成 make -G Ninja ../命令,将步骤3的make package命令改成ninja package命令
1.3 交叉编译源码(makefile 方式)
这里以aarch64-himix100-linux-gcc编译器为例说明交叉编译的方法。
1、cmake目录中有很多交叉编译的配置文件,复制toolchain.linux-arm11.cmake重命名为toolchain.linux-hisi.cmake,修改一下编译器,如下所示:
2、执行cmake -DPAHO_BUILD_SHARED=FALSE -DPAHO_BUILD_STATIC=TRUE -DPAHO_WITH_SSL=FALSE -DPAHO_BUILD_SAMPLES=FALSE -DPAHO_BUILD_DOCUMENTATION=TRUE -DCMAKE_TOOLCHAIN_FILE=/home/yyfage/YY/open_source/paho.mqtt.c-1.3.12/cmake/toolchain.linux-hisi.cmake ../
-DPAHO_BUILD_SHARED=FALSE: 不编译动态库
-DPAHO_BUILD_STATIC=TRUE:编译静态库
-DPAHO_WITH_SSL=FALSE:不使用ssl加密
-DPAHO_BUILD_SAMPLES=FALSE:不编译示例代码
-DPAHO_BUILD_DOCUMENTATION=TRUE:生成文档
DCMAKE_TOOLCHAIN_FILE=:指定交叉编译文件
3、执行make package编译并生成安装包
1.4 交叉编译源码,使能ssl功能
1.4.1 交叉编译openssl
要使用mqtt的ssl加密功能,先要交叉编译openssl
1、下载openssl源码https://www.openssl.org/source/
2、进入openssl源码目录执行./Configure no-asm --prefix=/home/yyfage/YY/gateway_tx2nx_08svn/gateway_tx2_nx/open_source/openssl/openssl-3.2-install --cross-compile-prefix=aarch64-himix100-linux-
no-asm:不用汇编加速编译,crypto/aes/aes-x86_64.s中的汇编是x86的,交叉编译不用这个汇编,否则出现很多crypto/aes/aes-x86_64.s:1561: Error: unknown mnemonic `movl' -- `movl 4(%r8),%ebx 类似错误。
如果出现cc1: error: unrecognized command line option "-m64"错误,提示编译器不支持-m64参数,该参数指示编译器编译成64位代码。有些编译器本身就是64位所以会不支持该选项,需要在生成的Makefile文件中去掉-m64参数
3、make编译
4、make install安装,会在--prefix目录下生成编译好的库
1.4.2 交叉编译paho-mqtt
编译时需要指定-DPAHO_WITH_SSL=TURE,用-DOPENSSL_ROOT_DIR参数指定openssl路劲时还是提示找不到好openssl头文件,最后是把openssl头文件复制到编译器的usr/include中。
编译步骤和1.3一致。