UBUNTU下MQTT+SSL编译

1.背景

物联网开发,需要与移动ONENET平台对接,涉及到MQTT+SSL通信。在网上下载了Eclipse的PAHO MQTT代码和openssl源码。下面讲述编译过程和遇到的一些坑。

2.OPENSSL编译

OpenSSL的源码网上很多,如
官网地址: https://www.openssl.org/
github下载:https://github.com/openssl/openssl
本人用的是openssl-1.1.1g.tar.gz,下载下来后解压,输入指令:

./config -shared no-asm --prefix=$PWD/build -fPIC --cross-compile-prefix=arm-xxx

注:
–prefix 表示自定义安装路径
-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的;
-shared 生成动态库
no-asm 表示:Do not use assembler code。
–cross-compile-prefix 表示指定交叉编译器,需要提前安装配置好自己需要的交叉编译器

通过config生成Makefile文件后,输入:
make
make install
在指定的目录下可以看到生成的库文件:
openssl编译完成

3.PAHO MQTT编译

接下来进行MQTT编译,PAHO MQTT源码官网下载路径:
http://www.eclipse.org/paho/
github下载:
https://github.com/eclipse/paho.mqtt.c
解压后,在paho.mqtt.c目录下创建build文件夹,在build文件夹创建ssllib,将openssl生成的lib,include等copy到ssllib中,方便管理:
在这里插入图片描述回到paho.mqtt.c目录下,输入:

cmake -DPAHO_WITH_SSL=TRUE -DPAHO_BUILD_STATIC=TRUE -DOPENSSL_INCLUDE_DIR=$PWD/build/ssllib/include -DOPENSSL_SSL_LIBRARY=$PWD/build/ssllib/lib/libssl.so -DOPENSSL_CRYPTO_LIBRARY=$PWD/build/ssllib/lib/libcrypto.so .

注意最后有“ .”,表示CMakeLists.txt在当前路径.
输出文件为CMakeCache.txt,如果需要交叉编译再加上-DCMAKE_C_COMPILER=arm-xxx即可。可以查看该文件的内容确认参数是否修改正确.
接着输入:
make
在这里插入图片描述make成功如上图:
接着make install
在这里插入图片描述libpaho-mqtt3as.*和libpaho-mqtt3cs.*即是支持ssl的mqtt库

3.编译过程问题汇总

问题1.mqtt在make时,报错/usr/bin/ld: cannot findssllib/lib/: File format not recognized:
cmake制作mqtt的Makefile时,一直以为-DOPENSSL_SSL_LIBRARY是lib路径,只填写到了$PWD/build/ssllib/lib,导致报错如下:
在这里插入图片描述问题2.cmake编译时找了不少网上资料,提供了各种参数配置,有些参数其实不对,可以通过CMakeCache.txt查看参数是否正确:
在这里插入图片描述错误的参数会提示no help,表示无效

问题3.编译出来的动态库找不到依赖库
在这里插入图片描述
这是因为我在编译mqtt库的时候重定义了SSL库位置,并不在默认路径下,需要编辑/etc/ld.so.conf,增加ssl库的位置:
在这里插入图片描述编辑完后,输入ldconfig,重加载。
再次检查maqtt动态库:
在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值