编译安装 ruby-2.0.0-p481 openssl 报错 SSLv3 undefined

版权声明:欢迎转载 https://blog.csdn.net/antony1776/article/details/82792589

背景

最近在 deepin/龙心平台上安装应用系统,需要用到 ruby-2.0.0-p481。

下载源码进行编译,报错如下:
在这里插入图片描述

即,由于:
ossl_ssl.c:132:27: error: ‘SSLv3_method’ undeclared here (not in a function)

因此:

/ext/openssl make failed

原因

搜索一番,在 stack overflow 发现类似问题。

https://stackoverflow.com/questions/37361891/undefined-symbol-sslv3-method-openssl-so-with-ruby-and-archlinux/37361892

The problem is caused by the ArchLinux OpenSSL package being built without SSLv3 support, as of this commit. I believe that a similar thing has been done in other distros such as Ubuntu.

也就是说 Ruby 自带的openssl 源码包,因为不支持 SSLv3 ,会在 ArchLinux 还有 Ubuntu 系统上产生此类问题。

解决方法

Ruby 官方已经出了该问题的补丁:

https://github.com/ruby/ruby/commit/801e1fe46d83c856844ba18ae4751478c59af0d1

根据补丁内容,主要涉及两个文件:

  1. ext/openssl/extconf.rb
  2. ext/openssl/ossl_ssl.c

就不需要使用补丁工具了,自己手动改,更方便快捷,不同版本的文件,行号可能有些差异:

extconf.rb

 have_func("SSLv2_method")
 have_func("SSLv2_server_method")
 have_func("SSLv2_client_method")
 # ---- add begin -------
 have_func("SSLv3_method")
 have_func("SSLv3_server_method")
 have_func("SSLv3_client_method")
 # ---- add end-------
 have_func("TLSv1_1_method")
 have_func("TLSv1_1_server_method")
 have_func("TLSv1_1_client_method")

ossl_ssl.c

    OSSL_SSL_METHOD_ENTRY(SSLv2_server),
     OSSL_SSL_METHOD_ENTRY(SSLv2_client),
 #endif
 #if defined(HAVE_SSLV3_METHOD) && defined(HAVE_SSLV3_SERVER_METHOD) && \
         defined(HAVE_SSLV3_CLIENT_METHOD) // new add
     OSSL_SSL_METHOD_ENTRY(SSLv3),
     OSSL_SSL_METHOD_ENTRY(SSLv3_server),
     OSSL_SSL_METHOD_ENTRY(SSLv3_client),
 #endif // new add
     OSSL_SSL_METHOD_ENTRY(SSLv23),
     OSSL_SSL_METHOD_ENTRY(SSLv23_server),
     OSSL_SSL_METHOD_ENTRY(SSLv23_client),

然后从新 make,可成功编译!

猜你喜欢

转载自blog.csdn.net/antony1776/article/details/82792589
今日推荐