我正在我的OS X 10.7 Mac上編寫Perl模塊,並且在嘗試使用DBI模塊時遇到錯誤。我能夠從我的模塊分離的問題,並重現它只有這個:Perl無法找到位於@INC中的模塊
[[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.
的這是令人費解的理由是:
[[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模塊在Perl應該看的地方!爲什麼Perl中找不到包含在@INC
中的路徑中的文件?
我能夠通過扭轉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導入不正確,「lazy symbol binding」調試消息的含義是什麼?
好奇:你'使用lib'之後是什麼在'@ INC'?導入問題很可能是由於Perl用於安裝DBI與現在用於加載Perl的Perl不兼容。 – ikegami 2012-08-08 20:54:52
啊哈!調查導致生產性事物。 @INC是一樣的,但你的評論對不同的Perls的建議是關鍵。事實證明,MacPorts對$ PATH的修補導致了「我無法使用該DBI.pm,它被編譯爲一個不同的Perl」。您應該將其擴展爲答案,以便我可以接受它。 :) – 2012-08-08 21:27:38