[转帖]openssl 1.1.0 与 openssl 1.0.2 编译依赖的兼容性问题

openssl 1.1.0 与 openssl 1.0.2 编译依赖的兼容性问题

————————————————
版权声明:本文为CSDN博主「墨城之左」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/antony1776/article/details/82801549


1 问题描述
服务器: 龙心/deepin

Linux deepin 3.10.108-deepin+ #3 SMP PREEMPT Tue Jan 23 16:54:44 CST 2018 mips64 GNU/Linux

服务器自带的 openssl 版本:

#> openssl version -a
OpenSSL 1.1.0e 16 Feb 2017
built on: reproducible build, date unspecified
platform: debian-mips64el


系统中使用的 Ruby 版本为 2.0.0,在安装 puma-2.11.1 时报错:

mini_ssl.c: error:

2 原因
openssl 1.1 与 openssl 1.0.2 相比,有较大的变化,导致应用软件在不改变源码的情况下无法同时支持两个版本。

详细情况,参见:

https://wiki.openssl.org/index.php/OpenSSL_1.1.0_Changes

3 补丁
这种情况下,有三种处理方案:

重新安装低版本的 openssl:影响系统其他应用,不可行
升级 ruby:需要大规模的修改当前应用,不可行
安装兼容性补丁
在编译时出现的问题,主要是因为数据结构和api有较大变化,通过补丁可以解决。

下载补丁: openssl-compat.tar.gz

https://wiki.openssl.org/images/e/ed/Openssl-compat.tar.gz

解压后的 tar 包中包括两个文件:libcrypto-compat.h, libcrypto-compat.c

将解压后的文件放置在待编译的项目中,并在 mini_ssl.c 中添加对 libcrypto-compat.h 的引用。

然后可编译成功。

4 示例
例如,对 puma-2.11.1 打补丁的过程,如下:

1、下载 puma-2.11.1 gem 包源码: github

2、下载补丁: openssl-compat.tar.gz,将解压后的 libcrypto-compat.h, libcrypto-compat.c 文件,拷贝到 puma-2.11.1 源码包的 puma-2.11.1/ext/puma_http11 路径下;

3、打开文件 puma-2.11.1/ext/puma_http11/mini_ssl.c,添加对 libcrypto-compat.h 的引用,如下所示:

4、在 puma-2.11.1/ext/puma_http11 目录下执行:

ruby extconf.rb
make

会编译生成 puma/puma_http11.so

猜你喜欢

转载自www.cnblogs.com/jinanxiaolaohu/p/12654562.html