2012-08-08 73 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模块安装需求:)

相关问题