2012-08-08 74 views
2

我正在我的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」調試消息的含義是什麼?

+5

好奇:你'使用lib'之後是什麼在'@ INC'?導入問題很可能是由於Perl用於安裝DBI與現在用於加載Perl的Perl不兼容。 – ikegami 2012-08-08 20:54:52

+4

啊哈!調查導致生產性事物。 @INC是一樣的,但你的評論對不同的Perls的建議是關鍵。事實證明,MacPorts對$ PATH的修補導致了「我無法使用該DBI.pm,它被編譯爲一個不同的Perl」。您應該將其擴展爲答案,以便我可以接受它。 :) – 2012-08-08 21:27:38

回答

1

這是我使用Perl的多個版本和模塊獲取編譯爲一個版本,然後不爲另一個工作,但仍坐在@INC(我自己的錯誤,不設置一個本地:: lib路徑對於每個perl有時 - 由於我的健忘,前幾天跟EV碰到這個問題)。

最好的測試方法是(備份當前模塊)從@INC路徑中刪除模塊,並嘗試重新編譯它,看看是否能解決問題。

我建議cpanm你CPAN和Perl模塊安裝需求:)

相關問題