Ruby中的LoadError

wil*_*ell 2 ruby

我有问题要求'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> 
Run Code Online (Sandbox Code Playgroud)

我知道一些标准模块需要很好,而其他标准模块则不需要.如果我说require 'yaml'或甚至require 'digest'那时候工作正常.我使用的是OS X 10.5.8,Ruby 1.9.1-p378.系统范围的Ruby 1.8.6安装工作正常.

就在上周,我卸载了Ruby并重新安装了它.当我第一次安装Ruby时,我以类似的方式从我的本地$HOME/usr目录前缀的源代码安装它.我尝试删除每个文件make install安装,然后重新安装,但这没有帮助.

您是否知道问题是什么以及如何解决?

Kon*_*ase 7

这可能与OpenSSL有关(Ruby使用OpenSSL for MD5/SHA1,至少如果可用的话).您可以通过编译较新版本的OpenSSL并在您自己的(./configure ... --with-openssl-dir=path/to/openssl)上链接它来解决这个问题.

很遗憾,您无法通过自制软件安装openssl.但是,显然,如果您使用的是macport,则可以使用以下端口: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
Run Code Online (Sandbox Code Playgroud)

然后,您可以在1.8和1.9之间切换:

rvm use system
ruby --version # => 1.8
rvm use 1.9.1
ruby --version # => 1.9.1
Run Code Online (Sandbox Code Playgroud)

我自己做了很长时间的编译,甚至编写了我自己的小脚本来管理更新.但是RVM在处理这个方面要好得多.如果您打算尝试使用RVM,只需在freenode的#rvm频道播放,人们总是愿意帮助那里.

顺便说一句,1.9.1有很多粗糙的边缘,我宁愿建议切换到1.9.2分支(或者至少在发布时切换到1.9.2p0).

康斯坦丁

  • 我认为它应该是`rvm pkg install openssl`而不是`rvm package install openssl` (7认同)