我正在我的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