我遇到了需要'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
安装,然后重新安装,但这没有帮助。
您是否知道问题是什么以及如何解决?
答案 0 :(得分: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
然后您可以在1.8和1.9之间切换:
rvm use system
ruby --version # => 1.8
rvm use 1.9.1
ruby --version # => 1.9.1
我自己做了很长时间的编译,甚至编写了我自己的小脚本来管理更新。但是RVM在处理这个方面要好得多。如果您打算尝试使用RVM,只需在freenode的#rvm频道播放,人们总是愿意帮助那里。
顺便说一句,1.9.1有很多粗糙的边缘,我宁愿建议切换到1.9.2分支(或者至少在发布时切换到1.9.2p0)。
康斯坦丁