2005-12-31
■ PERL_DL_NONLAZY
とある環境で、PerlのTestを書いていて、make testを実行すると
install_driver(Oracle) failed: Can't load '/usr/lib/perl/site_perl/5.005/sun4-solaris/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: ld.so.1: /opt/local/bin/perl: 重大なエラー: 再配置エラー: ファイル /usr/lib/perl5/site_perl/5.005/sun4-solaris/auto/DBD/Oracle/Oracle.so: シンボル newSVuv: 参照シンボルが見つかりません。
というエラーに出くわすことがありました。これは、テスト実行時のPERL_DL_NONLAZY=1という環境変数設定を抜いてやるとうまくいったのですが、なぜテストの時はLAZYロードにするのかな?と疑問に思い調べてみると、
ExtUtils/MM_Unix.pm For some reason which I forget, Unix machines like to have PERL_DL_NONLAZY set for tests.
だそうです...
ExtUtils-MakeMakerの古いバージョン(その環境のものは5.4302)だと、ExtUtils/MM_Unix.pmに
$perl = "PERL_DL_NONLAZY=1 $perl" unless $Is_Win32;
とべた書きしてあって、LAZYロードに変えることはMakeMakerのオプションではできないようです。
なので、Makefile.PLで↓のようにして対処しています。
use ExtUtils::MakeMaker;
use File::Copy;
WriteMakefile(
# ・・・
);
open(IN, "Makefile") || die;
open(OUT,">Makefile.tmp") || die;
while(<IN>) {
s/PERL_DL_NONLAZY=1//g;
print OUT;
}
close(OUT);
close(IN);
move("Makefile.tmp", "Makefile");
まあ、そもそもDBD/Oracle/Oracle.soのビルドの問題ではあるのですが...(多分、バイナリを他所から持ってきたのではと推測)
トラックバック - http://d.hatena.ne.jp/asakusabashi/20051231/p1
リンク元
- 9 http://inamode6.tokuhirom.dnsalias.org/
- 3 http://72.14.203.104/search?q=cache:ylJGcOLFzjwJ:bulkfeeds.net/app/search2?page=13&q=Windows&sort=+windows+rails+sjis&hl=ja
- 3 http://b.hatena.ne.jp/entry/http://prototype.conio.net/
- 2 http://1470.net/mm/related?memo=58581
- 2 http://d.hatena.ne.jp/tada180/
- 2 http://search.yahoo.co.jp/search?fr=slv1-adbe&p=TBD+プロセス
- 2 http://search.yahoo.co.jp/search?p=沖縄料理 浅草橋&ei=UTF-8&fr=top&fl=0&vc=&x=wrt&meta=vc=
- 1 http://1470.net/bm/asininfo/0974514047
- 1 http://172.23.2.217/cec-ss/wiki/index.php?技術ノウハウ
- 1 http://66.102.7.104/search?q=cache:ylJGcOLFzjwJ:bulkfeeds.net/app/search2?page=13&q=Windows&sort=+windows+rails+文字化け&hl=ja
