OS X 10.7 Mac で Perl モジュールを作成していますが、DBI モジュールを使用しようとするとエラーが発生します。モジュールから問題を分離し、これだけで再現できました。
[sean@mac:~]$ 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.
これが不可解な理由は次のとおりです。
[sean@mac:~]$ 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
Perl が見るべきところに DBI フォルダと DBI.pm モジュールがあります! に含まれるパスに存在するファイルが@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 が正しくインポートされないのはなぜですか? また、"lazy symbol binding" デバッグ メッセージは何を意味しますか?