LoadError - не может открыть общий объектный файл - файл присутствует, но он говорит, что такого файла нет - PullRequest
0 голосов
/ 04 июля 2018

Руби придумывает 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, создание нового проекта завершается неудачно с использованием 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 голосов
/ 04 июля 2018

Благодаря комментарию Джорданма я смог решить проблему!

Проблема была связана с 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...