1 openssl
下载地址:https://codeload.github.com/openssl/openssl/tar.gz/refs/tags/OpenSSL_1_1_1g
这里我采用的openssl-3.0.14,实测没有任何问题,上面连接的版本较低,我也实测过没有任何问题,但是本人还是建议在高本版没有问题的情况下,还是使用新版本为好
编译步骤:
tar zxf openssl-OpenSSL_1_1_1g.tar.gz
进入目录,并配置输出目录和交叉编译器, (我是直接在我的虚拟机上编译的,所以直接选择gcc,个别文章加了这个选项就不用去掉 -m64,我这里行不通)
cd openssl-OpenSSL_1_1_1g/
./config no-asm shared no-async --prefix=`pwd`/ssl_result --cross-compile-prefix=gcc(`pwd`/ssl_result是生成路径,也可以不设置,一般不设置默认是在/usr/local路径下,编译之后可以去路径下看是否生成对应的ssl相关的include跟lib)
执行下面命令,删除Makefile文件的 -m64(如果确认自己的系统是32位的,可以不用操作,正常顺手操作即可)
sed -i 's/-m64//' Makefile
编译、安装
make && make install
成功编译后,在/usr/local/lib64(这个目录是我指定生成的),可以看到里面生成的库
头文件拷贝到这里了:如下图
至此ssl库编译结束
**2.paho.mqtt.c 库的下载、交叉编译
**
本文下载的是paho.mqtt.c-1.3.13.tar.gz,下载地址:https://github.com/eclipse/paho.mqtt.c/archive/refs/tags/v1.3.13.tar.gz
编译 paho.mqtt.c 库之前,需要先编译其依赖库:openssl。
1、解压缩,创建要安装目录paho.mqtt.c_result
在这里插入代码片
tar xvf paho.mqtt.c-1.3.13.tar.gz
mkdir paho.mqtt.c_result/bin -p
mkdir paho.mqtt.c_result/include -p
mkdir paho.mqtt.c_result/lib -p
mkdir paho.mqtt.c_result/share/man/man1 -p
2、进入目录,交叉编译
cd paho.mqtt.c-1.3.13/
make CC=gcc:="-I `pwd`/../ssl_result/include" LDFLAGS:="-L `pwd`/../ssl_result/lib"
CFLAGS:=“-I pwd/…/ssl_result/include”:指定前面编译的 openssl 的头文件;
LDFLAGS:=“-L pwd/…/ssl_result/lib”:指定前面编译的 openssl 的库文件路径;
3、make install,安装编译结果
make install prefix=`pwd`/../paho.mqtt.c_result
prefix=pwd/…/paho.mqtt.c_result :指定安装目录路径;
4 paho.mqtt.c库写一个MQTT客户端
源码里paho.mqtt.c-master/src/samples路径下都是提供的demo。我们先采用较为简单的paho.mqtt.c-master/src/samples/MQTTClient_subscribe.c编译验证
注意:
gcc src/samples/MQTTClient_subscribe.c -I -lpaho-mqtt3cs -lpaho-mqtt3c -o MQTTClient_subscribe
编译过程中-lpaho-mqtt3cs要加上,要不然就会报一大推有关SSL相关开头的函数找不到,还有一个我这里编译的时候没有加对应的库的路径,是因为我编译这个demo之前全部给软连接到/usr/lib下了,编译器会默认从/usr/lib路径下寻找
注意:
我在验证的时候发现OPENSSL这个宏没有编译到,但是我看makefile里的这个参数是添加的,没有搞明白,当前我解决的方式是在源码中有关对这个引用的地方全部手动打开