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

sta*_*fry 8 ruby openssl archlinux rvm

最近在ArchLinux上的OpenSSL更新破坏了Ruby,因为后者依赖于前者支持的SSLv3.使用OpenSSL的Ruby代码将在终止时出现如下错误的问题:

openssl.so: undefined symbol: SSLv3_method - .../openssl.so (LoadError)
Run Code Online (Sandbox Code Playgroud)

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

我遇到问题的OpenSSL版本是,1.0.2h但我相信它是随之而来的1.0.2g.版本1.0.2f工作正常.

如何克服兼容性问题(不降低OpenSSL)?

sta*_*fry 14

由ArchLinux的OpenSSL软件包引起的问题正在兴建的SSLv3不支持,作为这一承诺.我相信在其他发行版中也做过类似的事情,比如Ubuntu.

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

$ rvm get head        # optional, if you want to!
$ rvm reinstall all   # or a specifc ruby version instead of 'all'
Run Code Online (Sandbox Code Playgroud)

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

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

已经与已建议安装此Ruby补丁的RVM团队讨论过这个问题,该补丁允许构建旧的rubies:

$ curl https://github.com/ruby/ruby/commit/801e1fe46d83c856844ba18ae4751478c59af0d1.diff > openssl.patch
$ rvm install --patch ./openssl.patch 1.9.3-p194
Run Code Online (Sandbox Code Playgroud)

我建立了ruby-1.9.3-p194,ruby-2.0.0-p247ruby-2.2.1成功使用此补丁.