代码之家  ›  专栏  ›  技术社区  ›  wilhelmtell

Ruby中的LoadError

  •  2
  • wilhelmtell  · 技术社区  · 14 年前

    我有问题需要 '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' 那就行了。我使用的是OSX10.5.8和Ruby1.9.1-p378。Ruby1.8.6的系统级安装运行良好。

    $HOME/usr 目录。我试着删除每一个文件 make install

    你知道问题是什么,怎么解决吗?

    1 回复  |  直到 14 年前
        1
  •  7
  •   Konstantin Haase    14 年前

    这可能与OpenSSL有关(Ruby对MD5/SHA1使用OpenSSL,至少如果可用的话)。您可以通过编译一个更新版本的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)。

    康斯坦丁