2012-08-08 7 views
2

OS X 10.7 Mac에 Perl 모듈을 쓰고 있습니다. 사용하려고하면 DBI 모듈에 오류가 있습니다. 난 그냥이 내 모듈에서 문제를 분리하고 그것을 재현 할 수 있었다 :@INC에있는 모듈을 찾을 수 없습니다.

[[email protected]:~]$ find /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level -iname '*dbi*' -maxdepth 2 
    /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/auto/DBI 
    /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/Bundle/DBI.pm 
    /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/DBI 
    /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/DBI.pm 
    /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/dbixs_rev.pl 

는 DBI 폴더와 DBI.pm 모듈이있다 :이 기괴

[[email protected]:~]$ perl -e 'use DBI;' 
Can't locate DBI.pm in @INC (@INC contains: 
    /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level 
    /opt/local/lib/perl5/site_perl/5.12.4 
    /darwin-multi-2level 
    /opt/local/lib/perl5/site_perl/5.12.4 
    /opt/local/lib/perl5 
    /vendor_perl/5.12.4/darwin-multi-2level 
    /opt/local/lib/perl5/vendor_perl/5.12.4 
    /opt/local/lib/perl5/5.12.4/darwin-multi-2level 
    /opt/local/lib/perl5/5.12.4 
    /opt/local/lib/perl5/site_perl 
    /opt/local/lib/perl5/vendor_perl .) at -e line 1. 
BEGIN failed--compilation aborted at -e line 1. 

이유는 이것이다 Perl이보아야하는 곳입니다! @INC에 포함 된 경로에있는 파일이 Perl에서 발견되지 않는 이유는 무엇입니까?

Perl의 팔을 뒤 틀어 해결 방법을 찾을 수있었습니다 : use lib '/System/Library/Perl/Extras/5.12/darwin-thread-multi-2level'; 줄을 모듈에 추가하면 Perl이 DBI를 올바르게 찾은 것 같습니다. 다음에하지만,이 경우, perl -d foo.pm 결과 :

dyld: lazy symbol binding failed: Symbol not found: _Perl_Gthr_key_ptr 
    Referenced from: /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/auto/DBI/DBI.bundle 
    Expected in: flat namespace 

    dyld: Symbol not found: _Perl_Gthr_key_ptr 
    Referenced from: /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/auto/DBI/DBI.bundle 
    Expected in: flat namespace 

    Trace/BPT trap: 5 

나는 그 중 하나를 해석하는 방법을 모른다, 그래서 내가 해결 방법에 만족하지 해요 - 그것은 여전히있다 "의 냄새가 만약 당신이 그것을 알아 내지 못한다면, 미래의 불쾌한 놀라움이 될 근본적인 문제 "라고 말했다.

DBI가 제대로 가져 오지 않는 이유와 "지연 심볼 바인딩"디버그 메시지의 의미는 무엇입니까?

+5

호기심 : 귀하의'사용 lib' 후'@의 INC'에 무엇입니까? 가져 오기 문제는 Perl이 지금 그것을로드하는 데 사용 된 Perl과 호환되지 않는 DBI를 설치하는 데 사용 되었기 때문에 발생했을 가능성이 큽니다. – ikegami

+4

아아! 조사를 통해 생산적인 일이 발생했습니다. @INC는 동일했지만 다른 Perls에 대한 귀하의 의견 제안이 중요했습니다. 그 결과, 맥 포트 (MacPorts)가 $ PATH를 사용하여 "나는 그 DBI를 사용할 수 없다."라는 상황을 만들었다. 다른 펄을 위해 컴파일되었다. " 이 질문을 받아 들일 수 있도록 대답으로 확장해야합니다. :) –

답변

1

이것은 여러 버전의 perl과 모듈을 하나의 버전으로 컴파일 한 다음 다른 버전에서는 작동하지 않지만 @INC에 여전히 앉아있는 경우에 문제가되는 경우가 있습니다 (local : :: lib 경로를 설정하지 않은 실수 요즘 각 perl에 대한 - 내 건망증으로 인해 요 전날 EV로이 문제에 부딪혔다.)

가장 좋은 방법은 (현재 모듈 백업) @INC 경로에서 모듈을 제거하고 다시 컴파일하여 문제가 해결되는지 확인하는 것입니다.

나는 당신의 CPAN에 대한 cpanm을 추천 펄 모듈 설치 요구 사항 :

관련 문제