背景
最近在 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
根据补丁内容,主要涉及两个文件:
- ext/openssl/extconf.rb
- ext/openssl/ossl_ssl.c
就不需要使用补丁工具了,自己手动改,更方便快捷,不同版本的文件,行号可能有些差异:
extconf.rb
have_func("SSLv2_method")
have_func("SSLv2_server_method")
have_func("SSLv2_client_method")
have_func("SSLv3_method")
have_func("SSLv3_server_method")
have_func("SSLv3_client_method")
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)
OSSL_SSL_METHOD_ENTRY(SSLv3),
OSSL_SSL_METHOD_ENTRY(SSLv3_server),
OSSL_SSL_METHOD_ENTRY(SSLv3_client),
#endif
OSSL_SSL_METHOD_ENTRY(SSLv23),
OSSL_SSL_METHOD_ENTRY(SSLv23_server),
OSSL_SSL_METHOD_ENTRY(SSLv23_client),
然后从新 make,可成功编译!
|
请发表评论