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一致。

    

 

  

 

posted @ 2023-02-15 16:25  YYFaGe  阅读(596)  评论(0编辑  收藏  举报