我遇到了一些需要'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> 我知道一些标准模块需要fine,而另一些则不需要,如果我说require 'yaml'甚至require 'digest',那就没问题了。我使用的是OS 10.5.8,带有Ruby 1.9.1-p378。Ruby 1.8.6在系统范围内的安装运行良好。
就在上周,我卸载并重新安装了Ruby。当我第一次安装Ruby时,我以类似的方式安装它,从我本地$HOME/usr目录的源代码开始安装。我试着删除make install安装的每个文件,然后重新安装,但没有帮助。
您是否知道问题是什么以及如何解决它?
发布于 2010-06-16 19:56:06
这可能与OpenSSL有关(Ruby将OpenSSL用于MD5/SHA1,如果可用的话)。您可以通过编译较新版本的OpenSSL并自行链接到它(./configure ... --with-openssl-dir=path/to/openssl)来修复此问题。
不幸的是,您不能通过自制软件安装openssl。但是,显然,如果您正在使用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,只需在freenode上使用#rvm通道,人们总是愿意在那里提供帮助。
顺便说一句,1.9.1有很多粗糙的边缘,我宁愿建议切换到1.9.2分支(或者至少在发布后立即切换到1.9.2p0 )。
康斯坦丁
https://stackoverflow.com/questions/3032601
复制相似问题