2013-03-05 53 views
8

Ruby最近在我兄弟的機器上停止工作。LoadError:dlopen(digest/sha1.bundle):未找到符號:_rb_Digest_SHA1_Finish

  • gem命令
  • rails server
  • rails console

所有與失敗,錯誤如下:

$ irb 
irb(main):001:0> require 'digest/sha1' 

LoadError: dlopen(~/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/x86_64-darwin12.2.0/digest/sha1.bundle, 9): Symbol not found: _rb_Digest_SHA1_Finish 
    Referenced from: ~/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/x86_64-darwin12.2.0/digest/sha1.bundle 
    Expected in: flat namespace 

in ~/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/x86_64-darwin12.2.0/digest/sha1.bundle - ~/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/x86_64-darwin12.2.0/digest/sha1.bundle 
    from ~/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require' 
    from ~/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require' 
    from (irb):1 
    from ~/.rbenv/versions/2.0.0-p0/bin/irb:12:in `<main>' 

他嘗試了不同版本的Ruby。用rvm重新安裝一切。運行rvm implode並重新安裝rvm。切換到rbenv。幾個紅寶石通過ruby-build安裝。 brew install ruby

全都有同樣的問題。

如果他卸載了所有的紅寶石,在/usr/bin/ruby的OS提供的版本工作。但它是1.8.7。

經過幾個小時的故障排除,我們到達了下面的解決方案。我希望它能幫助你避免一些痛苦。

回答

10

可能的解決方案:

  1. $ unset C_INCLUDE_PATH並重新安裝紅寶石

    這是爲我工作的解決方案。

    $ echo $C_INCLUDE_PATH

    如果C_INCLUDE_PATH設置,這將打破紅寶石版本。將其從您的環境中移除;或者暫時使用$ unset C_INCLUDE_PATH,或者永久使用(可能位於.bashrc,.profile,.bash_profile中);然後重新安裝紅寶石。

  2. 它可能與OpenSSL,RVM,XCode的命令行工具(gcc)或其他構建問題有關。

    參見this answer如果以前的解決方案不起作用。

2

對任何人來說,比如我,來,因爲這樣的錯誤的位置:

LoadError: dlopen(/Users/sebkomianos/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/x86_64-darwin13.0.0/openssl.bundle, 9): Symbol not found: _SSLv2_client_method 
Referenced from: /Users/sebkomianos/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/x86_64-darwin13.0.0/openssl.bundle 
Expected in: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib 

一個解決方案(taken from here)可能會重新安裝紅寶石版本。例如:rbenv install 2.0.0-p247

+0

重新安裝ruby爲我工作。 '未設置C_INCLUDE_PATH'不是必需的。 – 2014-10-10 20:39:11