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가 제대로 가져 오지 않는 이유와 "지연 심볼 바인딩"디버그 메시지의 의미는 무엇입니까?
호기심 : 귀하의'사용 lib' 후'@의 INC'에 무엇입니까? 가져 오기 문제는 Perl이 지금 그것을로드하는 데 사용 된 Perl과 호환되지 않는 DBI를 설치하는 데 사용 되었기 때문에 발생했을 가능성이 큽니다. – ikegami
아아! 조사를 통해 생산적인 일이 발생했습니다. @INC는 동일했지만 다른 Perls에 대한 귀하의 의견 제안이 중요했습니다. 그 결과, 맥 포트 (MacPorts)가 $ PATH를 사용하여 "나는 그 DBI를 사용할 수 없다."라는 상황을 만들었다. 다른 펄을 위해 컴파일되었다. " 이 질문을 받아 들일 수 있도록 대답으로 확장해야합니다. :) –