LoadError-无法打开共享对象文件-存在文件,但没有此类文件

时间:2018-07-03 22:42:40

标签: ruby

我不了解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

我想我必须错过一些显而易见的事情。弹出的任何提示都非常感谢!

1 个答案:

答案 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的依赖项?