2010-06-13 3 views
2

'digest/sha1'이 필요한 문제가 있습니다.루비의 LoadError

~$ ./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'라고 말하고 싶다면 잘 작동합니다. Ruby 1.9.1-p378과 함께 OS X 10.5.8을 사용하고 있습니다. Ruby 1.8.6의 시스템 전체 설치가 정상적으로 작동합니다.

그냥 지난 주에 Ruby를 제거하고 다시 설치했습니다. Ruby를 처음 설치했을 때 유사한 방식으로 소스 코드를 설치했는데 로컬 $HOME/usr 디렉토리에 접두어가 붙어있었습니다. 나는 각각의 모든 파일을 제거하려고 시도했다. make install이 설치되고, 다시 설치되었지만, 도움이되지 않았다.

문제점의 해결 방법은 무엇입니까?

답변

7

이것은 아마도 OpenSSL과 관련이 있습니다 (적어도 사용 가능한 경우 Ruby는 OpenSSL for MD5/SHA1을 사용합니다). OpenSSL의 최신 버전을 컴파일하고 직접 링크 (./configure ... --with-openssl-dir=path/to/openssl)하면이 문제를 해결할 수 있습니다.

불행히도 homebrew를 통해 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으로 전환하는 것이 좋습니다).

콘스탄틴

+0

실제로 RVM의 Ruby 1.9.2 헤드에는 digest/sha1이 필요하지 않습니다. 그러나 나는 근원지에서 설치할 때 무엇이 ​​잘못되는지 궁금합니다. 1.9.2 머리가 아닌 다른 Ruby를 설치하는 데 문제가 있습니다. 그러나 이것은 새롭고 독특한 질문에 속한다고 생각합니다. – wilhelmtell

+0

OpenSSL을 완전히 제거하여 임베디드 Linux 시스템에서 이러한 문제가 수정 된 것을 보았습니다. 하지만 실제로 루비 젬이 깨졌습니다. –

+6

나는'rvm 패키지 인스톨 openssl'이 아니라'rvm 패키지 인스톨 openssl'이 있어야한다고 생각합니다. – Oleander