LoadError - 无法打开共享对象文件 - 文件存在,但它说没有这样的文件

arm*_*6er 2 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'
Run Code Online (Sandbox Code Playgroud)

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"]
Run Code Online (Sandbox Code Playgroud)

另一个例子,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)
Run Code Online (Sandbox Code Playgroud)

再次,执行操作ls /usr/lib/ruby/2.3.0/x86_64-linux/digest/md5.so会显示该文件的存在。

我的红宝石版本是ruby 2.3.1p112. 如果您想知道,uname -m请返回x86_64

我想我一定错过了一些明显的事情。任何出现的提示都非常感谢!

arm*_*6er 5

感谢jordanm的评论,我能够解决这个问题!

该问题与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
...
Run Code Online (Sandbox Code Playgroud)

安装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)
Run Code Online (Sandbox Code Playgroud)

现在,我能够require 'openssl'生成一个新rails项目。

但毕竟,ruby 不应该抱怨缺少软件包,或者openssl-1.0至少应该是 的依赖项吗rails