paho.mqtt.c github地址:https://github.com/eclipse/paho.mqtt.c
openssl github地址: https://github.com/openssl/openssl
因为在编译paho.mqtt.c时会使用到openssl这个库,所以在交叉编译paho.mqtt.c这个库之前,我们首先需要对openssl进行交叉编译。
我们首先新建一个MQTT_Client_SDK文件夹,接着在其中创建openssl_1.1.1b文件夹和paho.mqtt_1.3.0文件夹,在这两个文件夹均创建lib和include文件夹,用于存放交叉编译生成的so库和头文件。
首先我们根据上面的github网址下载有 openssl-OpenSSL_1_1_1b.tar.gz paho.mqtt.c-1.3.0.tar.gz
1) tar xvf openssl-OpenSSL_1_1_1b.tar.gz
2) cd openssl-OpenSSL_1_1_1b
3) ./config no-asm shared --prefix=$PWD/install --cross-compile-prefix=aarch64-linux-gnu-
no-asm 表示不使用汇编代码
shared 表示生成动态库
--prefix 表示生成的库、头文件、bin等的路径
--cross-compile-prefix 表示使用的交叉编译链工具
修改openssl-OpenSSL_1_1_1b文件夹目录下的Makefile,删除其中所有的 -m64 编译选项(此Makefile中有两处).
4) make
5) make install
最终在 openssl-OpenSSL_1_1_1b中的install目录下包含 bin include lib share ssl 五个文件夹,而我们使用的主要是其中的include 和 lib文件夹。将lib include两个文件夹下的文件拷贝到 openssl_1.1.1b目录下对应的lib和include目录下。
1) tar xvf paho.mqtt.c-1.3.0.tar.gz
2) cd paho.mqtt.c-1.3.0
3) 修改文件夹根目录下的Makefile文件
122行的修改编译工具 CC ?= gcc ======> CC := aarch64-linux-gnu-gcc
(:=表示指定编译工具 ?= 表示如果前面未指定编译工具则使用此处指定的编译工具)
在129行下面添加
CFLAGS := -I$(PWD)/../openssl_1.1.1b/include
LDFLAGS := -L$(PWD)/../openssl_1.1.1b/lib
修改后保存该Makefile
4) make
执行make命令后会在当前目录下创建一个build/output目录,将里面的so库拷贝到paho.mqtt_1.3.0/lib目录下,然后将源码主目录src文件夹里面的头文件拷贝到paho.mqtt_1.3.0/include目录下即可。
交叉编译完openssl和paho.mqtt.c,基本的mqtt客户端sdk组成了,接下来我们需要写一个简单的demo用于验证该sdk的功能。
这里的验证我们可以使用paho.mqtt.c-1.3.0/src/samples/目录下的 MQTTClient_publish.c 和 MQTTClient_subscribe.c两个文件。我们适当的修改一下这两个源代码。文章最后我会贴出整个sdk的源代码可自行查看修改部分。
接下来我们只需要写一个Makefile即可,具体如何写这个Makefile可以参考我的另一篇博客 https://blog.csdn.net/zz531987464/article/details/90183836
其最终的实现的效果是:
订阅程序shared_subscribe 订阅的topic是test321,消息级别为QoS2
发布程序shared_publish 发布的topic是test321,消息级别为QoS2,消息本身为“message=xx”
同时可以记录消息发送和订阅到的条数,方便进行数据的对比和确认。
sdk下载路径为:https://download.csdn.net/download/zz531987464/11181042