未定义的符号:使用Ruby和ArchLinux的SSLv3_method – … / openssl.so

最近在Arch Linux上进行的OpenSSL更新破坏了 Ruby,因为后者依赖于前者支持的SSLv3.使用OpenSSL的Ruby代码将在终止时出现问题,如下所示:
openssl.so: undefined symbol: SSLv3_method - .../openssl.so (LoadError)

我使用RVM的多个版本的Ruby,这个问题适用于所有版本.

我遇到问题的OpenSSL版本是1.0.2h,但我相信它是用1.0.2g引入的.版本1.0.2f工作正常.

如何克服兼容性问题(没有降级OpenSSL)?

解决方法

问题是由于在没有SSLv3支持的情况下构建的ArchLinux OpenSSL软件包,从 this commit开始.我相信在其他发行版(如Ubuntu)中也做了类似的事情.

RVM环境中的解决方案是重新安装将重建它们的Rubies(您可能还希望更新到最新的rvm):

$rvm get head        # optional,if you want to!
$rvm reinstall all   # or a specifc ruby version instead of 'all'

但是,旧的rubies仍会因为编译错误而失败:

Error running '__rvm_make -j1'
ossl_ssl.c:143:27: error: ‘SSLv3_client_method’ undeclared here (not in a function)

这已经是discussed与RVM团队一起建议安装this Ruby patch,允许更旧的ruby构建:

$curl https://github.com/ruby/ruby/commit/801e1fe46d83c856844ba18ae4751478c59af0d1.diff > openssl.patch
$rvm install --patch ./openssl.patch 1.9.3-p194

我用这个补丁成功构建了ruby-1.9.3-p194,ruby-2.0.0-p247和ruby-2.2.1.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...