我不了解Ruby提供的LoadErrors
。它抱怨在存在共享对象文件时打开它。
irb(main):001:0> require 'openssl'
LoadError: libssl.so.1.0.0: cannot open shared object file: No such file or directory - /usr/lib/ruby/2.3.0/x86_64-linux/openssl.so
from /usr/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/lib/ruby/2.3.0/openssl.rb:13:in `<top (required)>'
from /usr/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
但是ls /usr/lib/ruby/2.3.0/x86_64-linux/openssl.so
返回文件/usr/lib/ruby/2.3.0/x86_64-linux/openssl.so
加载路径:
irb(main):001:0> pp $LOAD_PATH
["/usr/lib/ruby/site_ruby/2.3.0",
"/usr/lib/ruby/site_ruby/2.3.0/x86_64-linux",
"/usr/lib/ruby/site_ruby",
"/usr/lib/ruby/vendor_ruby/2.3.0",
"/usr/lib/ruby/vendor_ruby/2.3.0/x86_64-linux",
"/usr/lib/ruby/vendor_ruby",
"/usr/lib/ruby/2.3.0",
"/usr/lib/ruby/2.3.0/x86_64-linux"]
另一个示例,安装了rails
gem时,生成新项目失败,并显示以下LoadError
。
/usr/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:120:in `require': libcrypto.so.1.0.0: cannot open shared object file: No such file or directory - /usr/lib/ruby/2.3.0/x86_64-linux/digest/md5.so (LoadError)
同样,执行ls /usr/lib/ruby/2.3.0/x86_64-linux/digest/md5.so
显示文件的存在。
我的红宝石版本为ruby 2.3.1p112
。
如果您想知道,uname -m
返回x86_64
。
我想我必须错过一些显而易见的事情。弹出的任何提示都非常感谢!
答案 0 :(得分:2)
多亏约旦的评论,我才得以解决问题!
该问题与openssl
有关。 ldd
打印出共享对象的依存关系,并显示出缺少的库。
ldd /usr/lib/ruby/2.3.0/x86_64-linux/openssl.so
...
libssl.so.1.0.0 => not found
libcrypto.so.1.0.0 => not found
...
在安装openssl-1.0
软件包之后(在安装openssl
v1.1.0软件包的同时),该命令的输出看起来更好:
libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x00007faddac8f000)
libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x00007fadda814000)
现在,我能够require 'openssl'
并生成一个新的rails
项目。
但是毕竟,红宝石不应该抱怨缺少软件包吗?还是应该openssl-1.0
至少是rails
的依赖项?