LoadError в Ruby - PullRequest
       1

LoadError в Ruby

2 голосов
/ 13 июня 2010

У меня возникли проблемы, требующие 'digest/sha1'.

~$ ./configure --prefix=$HOME/usr --program-suffix=19 --enable-shared
~$ make
~$ make install
~$ irb19
irb(main):001:0> require 'digest/sha1'
LoadError: dlopen(/Users/matan/usr/lib/ruby19/1.9.1/i386-darwin9.8.0/digest/sha1.bundle, 9): Symbol not found: _rb_Digest_SHA1_Finish
  Referenced from: /Users/matan/usr/lib/ruby19/1.9.1/i386-darwin9.8.0/digest/sha1.bundle
  Expected in: flat namespace
 - /Users/matan/usr/lib/ruby19/1.9.1/i386-darwin9.8.0/digest/sha1.bundle
    from (irb):1:in `require'
    from (irb):1
    from /Users/matan/usr/bin/irb19:12:in `<main>'
irb(main):002:0> 

Я знаю, что некоторые стандартные модули требуют штрафа, а другие нет.Если бы я сказал require 'yaml' или даже require 'digest', тогда это прекрасно работает.Я использую OS X 10.5.8, с Ruby 1.9.1-p378.Общесистемная установка Ruby 1.8.6 работает нормально.

Буквально на прошлой неделе я удалил Ruby и переустановил его.Когда я впервые установил Ruby, я установил его аналогичным образом из исходного префикса в моем локальном каталоге $HOME/usr.Я попытался удалить все файлы, которые установил make install, затем переустановить, но это не помогло.

У вас есть идея, что это за проблема и как ее решить?

1 Ответ

7 голосов
/ 16 июня 2010

Это, вероятно, связано с OpenSSL (Ruby использует OpenSSL для MD5 / SHA1, по крайней мере, если доступно). Вы можете исправить это, скомпилировав новую версию OpenSSL и связавшись с ней самостоятельно (./configure ... --with-openssl-dir=path/to/openssl).

К сожалению, вы не можете установить openssl с помощью homebrew. Однако, по-видимому, если вы используете macports, есть доступный порт: sudo port install openssl.

Но я бы порекомендовал просто использовать RVM :

bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
rvm package install openssl
rvm install 1.9.1 -C --with-openssl-dir=$HOME/.rvm/usr

Затем вы можете переключаться между 1,8 и 1,9:

rvm use system
ruby --version # => 1.8
rvm use 1.9.1
ruby --version # => 1.9.1

Я долго компилировал самостоятельно, даже написал свой собственный маленький скрипт, управляющий обновлением. Но RVM гораздо лучше справляется с этим. Если вы собираетесь попробовать RVM, просто прогуляйтесь по каналу #rvm на freenode, люди всегда готовы помочь там.

Кроме того, 1.9.1 имеет много неровностей, и я бы скорее рекомендовал переключиться на ветку 1.9.2 (или, по крайней мере, переключиться на 1.9.2p0, как только выйдет).

Константин

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