LoadError: dlopen(digest/sha1.bundle): Symbol not found: _rb_Digest_SHA1_Finish

Erik Peterson picture Erik Peterson · Mar 5, 2013 · Viewed 8k times · Source

Ruby stopped working on my brother's machine recently.

  • gem commands
  • rails server
  • rails console

All failed with the following error:

$ 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>'

He tried different versions of Ruby. Reinstalling everything with rvm. Running rvm implode and reinstalling rvm. Switching to rbenv. Several Rubies installed via ruby-build. brew install ruby.

All had the same problem.

If he uninstalled all rubies, the OS supplied version in /usr/bin/ruby worked. But it's 1.8.7.

After hours of troubleshooting, we arrived at the solution below. I hope it helps you avoid some pain.

Answer

Erik Peterson picture Erik Peterson · Mar 5, 2013

Possible solutions:

  1. $ unset C_INCLUDE_PATH and reinstall Ruby

    This is the solution that worked for me.

    $ echo $C_INCLUDE_PATH

    If C_INCLUDE_PATH is set, it will break Ruby builds. Remove it from your environment; either temporarily with $ unset C_INCLUDE_PATH, or permanently (might be in .bashrc, .profile, .bash_profile); then reinstall ruby.

  2. It might be related to OpenSSL, RVM, XCode's Command Line Tools (gcc), or other build issues.

    See this answer if the previous solution didn't work.