安装 ruby​​-2.1.2:无法加载此类文件 -- openssl (LoadError)

Posted

技术标签:

【中文标题】安装 ruby​​-2.1.2:无法加载此类文件 -- openssl (LoadError)【英文标题】:Installing ruby-2.1.2: Cannot load such file -- openssl (LoadError) 【发布时间】:2020-04-08 13:52:37 【问题描述】:

使用 rvm 安装 ruby​​-2.1.2 时出现一些错误。我是红宝石新手,因此需要帮助。请告诉我

安装日志和其他相关信息在这里:log

根据问题描述中提供的日志,我在系统中安装了 ruby​​ 2.1.2。但是,由于安装错误,尝试使用 gem list 列出 gem 时出现错误。更改为 2.1.2 后,即 rvm use 2.1.2 并执行 ruby -r openssl -e 'puts OpensSSL::OPENSSL_VERSION' 会出现此错误:

/Users/praveenk.k/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in require':无法加载此类文件 - - 来自 /Users/praveenk.k/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in 要求的 openssl (LoadError)

【问题讨论】:

OpenSSL 可能不在您的计算机上。通过which openssl 检查它是否存在。 which openssl 打印输出 /usr/local/opt/openssl@1.1/bin/openssl 。因此,我假设我的系统中存在 openssl。 好的,您的问题似乎不是 openssl 问题。接下来您可以尝试什么:查看文件 /Users/praveenk.k/.rvm/log/1576471018_ruby-2.1.2/gem.install.gem-wrappers->=1.4.0.log。与我们分享此文件的内容。 cat "/Users/praveenk.k/.rvm/log/1576471018_ruby-2.1.2/gem.install.gem-wrappers->=1.4.0.log" 的内容是这样的:ERROR: Loading command: install (LoadError) cannot load such file -- openssl ERROR: While executing gem ... (NoMethodError) undefined method invoke_with_build_args' for nil:NilClass` 请将您最后评论的文字放在您的原始帖子中。这样人们就更容易为您提供帮助。 【参考方案1】:

Ruby https://github.com/rbenv/ruby-build/issues/1353)。

只是预感,但如果您使用的是 Mac + Homebrew,OpenSSL 1.0 最近已被删除,因此任何类似于 brew upgrade openssl 的内容都会破坏它。

有几种方法可以解决这个问题:

    我通过 asdf 使用 LibreSSL 安装了较旧的红宝石(无论如何这可能更安全,请参阅 https://security.stackexchange.com/questions/112545/what-are-the-main-advantages-of-using-libressl-in-favor-of-openssl):
$ openssl
OpenSSL> version
LibreSSL 2.8.3
    编译并链接您自己的 OpenSSL 1.0(或者在构建 Ruby 时将编译器标志设置为环境变量 -- https://rvm.io/rubies/installing) 查看系统的包管理器是否允许您访问 openssl 1.0 并使用它进行安装(最近正在帮助一位同事解决此问题,但不幸的是,我们目前无法找到适合自制的酒桶)

可能还有比这更简单的事情;如果有人有想法,请随时发表评论或提供替代答案。

编辑

我个人在使用其他一些软件时遇到了这个问题,发现这解决了它,因为旧的 SSL 版本仍然存在:

brew switch openssl 1.0.2s

只要 Homebrew 不能“帮助”我清理它,它就应该可以工作。

【讨论】:

这真的很有帮助!我关注了这个link【参考方案2】:

工作示例

brew install rbenv/tap/openssl@1.0
rvm install 2.1.2 -C --with-openssl-dir=`brew --prefix openssl@1.0`

来自https://github.com/rvm/rvm/issues/4819#issuecomment-595644550

【讨论】:

【参考方案3】:

对于 Debian 10:

sudo apt-get install -y libssl-dev

【讨论】:

【参考方案4】:

在 Amazon Linux 2 上,即使安装了 openssl,您也需要完整的开发工具包

yum install openssl-devel

【讨论】:

【参考方案5】:

对我来说,在 centos 7 中解决这个问题

$ openssl version -a


OpenSSL 1.0.2k-fips  26 Jan 2017
built on: reproducible build, date unspecified
platform: linux-x86_64
options:  bn(64,64) md2(int) rc4(8x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 
compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM

------------------------------------------------------------------------
OPENSSLDIR: "/etc/pki/tls" <- ************* COPY THIS PATH *************
------------------------------------------------------------------------

engines:  rdrand dynamic 

将路径粘贴到下面一行如何 --with-openssl-dir 参数

$ RUBY_CONFIGURE_OPTS="--with-openssl-dir=/etc/pki/tls" rbenv install 2.7.2

【讨论】:

【参考方案6】:

在 mac BigSur 上,我通过

修复了它
$ rvm pkg install openssl
$ rvm install 2.1.2 -C --with-openssl-dir=$HOME/.rvm/usr

或者你也可以试试

$ rvm pkg install openssl
$ CFLAGS="-Wno-error=implicit-function-declaration" rvm install 2.1.2 -C --with-openssl-dir=$HOME/.rvm/usr

【讨论】:

以上是关于安装 ruby​​-2.1.2:无法加载此类文件 -- openssl (LoadError)的主要内容,如果未能解决你的问题,请参考以下文章

无法安装 gem - 无法构建 gem 本机扩展 - 无法加载此类文件 - mkmf (LoadError)

虽然安装了gem,但无法加载此类文件 - toml-rb

Ruby loaderror 无法加载此类文件

Ruby:无法加载此类文件 - LoadError

Ruby on Rails:“无法加载此类文件”事件机器

Ruby 雾 gem 导致服务器无法运行:无法加载此类文件 -- xmlrpc/client (LoadError)