UBUNTU下MQTT+SSL编译

tech2022-08-09  127

MQTT+SSL编译

1.背景2.OPENSSL编译3.PAHO MQTT编译3.编译过程问题汇总

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 在指定的目录下可以看到生成的库文件:

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动态库:

最新回复(0)