OpenSSL 交叉编译与MQTT移植

概述

为了防止后来人走弯路本人综合网上的各路教程,统计出一个自己成功方便的路径,以便给其他有需求的人一些参考
一开始是因为工作需求需要移植mqtt协议到嵌入式arm-linux上,使用的phao的mqtt支持包,一开始看到phao官网上的说明,便选择embbed的嵌入式版本,但是嵌入式版本是不支持ssl的,可能是官网描写有误,所以,要支持ssl,必须选择标准的c版本进行交叉编译。

第一步

  1. 首先标准的c版本是需要OpenSSL的支持,我们先从 OpenSSL的官网 下载OpenSSL的最新版本 openssl-1.1.1-pre8.tar.gz
  2. 然后从github上下载zip包
  3. 在方便位置新建文件夹为template(推荐在主目录)
mkdir ./template
  1. 将openssl-1.1.1-pre8.tar.gz和paho.mqtt.c-master.zip都放到template文件夹下备用


    image.png

第二步

  1. 首先将OpenSSL和paho.mqtt.c解压到当前目录
cd ./template
tar -xzvf openssl-1.1.1-pre8.tar.gz 
 unzip paho.mqtt.c-master.zip 

解压之后的情况应该是这样


image.png
  1. 先将OpenSSL进行交叉编译,这里我们需要修改Makefile
    先执行
./config no-asm -shared --prefix=/home/dai/template/ssl-arm

perfix是为了把编译完成的文件存放在template下的ssl-arm目录下,需要使用绝对地址,如果像改变存放地址,可以自己进行修改,

gedit ./openssl-1.1.1-pre8/Makefile 

ubuntu推荐使用图形文本编辑器,如果是其他linux也可以使用vi编辑器
定位到90行将

CROSS_COMPILE=

改为

CROSS_COMPILE=arm-linux-

交叉编译工具实际由你的目标板来定
顺便将123和124行的-m64删除,我们这里不需要用到64编译
然后保存并关闭,
接下来执行

make -j3

如果出现错误

crypto/threads_pthread.c: In function `CRYPTO_THREAD_lock_new':
crypto/threads_pthread.c:43: warning: implicit declaration of function `pthread_mutexattr_settype'
crypto/threads_pthread.c:43: error: `PTHREAD_MUTEX_RECURSIVE' undeclared (first use in this function)
crypto/threads_pthread.c:43: error: (Each undeclared identifier is reported only once
crypto/threads_pthread.c:43: error: for each function it appears in.)
Makefile:5122: recipe for target 'crypto/threads_pthread.o' failed
make[1]: *** [crypto/threads_pthread.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/home/dai/template/openssl-1.1.1-pre8'
Makefile:171: recipe for target 'all' failed
make: *** [all] Error 2

打开crypro目录下的threads_pthread.c,在18行添加一句

#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP

即可,这是因为有些linux版本没有定义此变量造成的但是两者意义相同。
接着再执行

make install

就可以在ssl-arm文件下看到这些


image.png

到现在为止的话,OpenSSL的编译算是告一段落了

第三部

编译paho.mqtt.c

  1. 打开paho.mqtt.c-master下的makefile文件

在第129行添加

CFLAGS += -I../ssl-arm/include -lrt
LDFLAGS += -L../ssl-arm/lib

为ssl编译出来的路径,如有自行修改,便自行修改
接下来执行

make -j3 CC=arm-linux-gcc

接下来就大功告成了,只要在build文件找到动态库就可以了,当然,simple里的例程也可以测试运行以下。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,169评论 19 139
  • 今天参加家长会,班级被安排到阶梯教室,我心想可能是给以前喇叭里听到的声音安排些观众,或者为了照相好看。现实是有讲座...
    七月的简书阅读 3,635评论 1 3
  • 一、基本信息 1、产品名称:蚂蜂窝自由行2、版本号:V8.0.73、体验环境:IOS10.3.2 二、产品信息 1...
    转转x阅读 5,651评论 0 3
  • 个体和个体之间为什么要连接呢?…… 如果个体是单一的,那么它就失去了它存在的意义,人活着的意义就是《存在》 ,连接...
    吾心之旅阅读 1,720评论 2 0

友情链接更多精彩内容