<del>やっぱり動かない。。。</del>動きますた
2006-12-10


こいつの続き。とりあえず、Visual C++ 2005 と Windows XP (または Windows Server 2003) との組み合わせにおいて固有の仕様であることは分かった。

で、とりあえず、マニフェストというのを定義して設定する必要があり、試しに作ったテストプログラムのビルドログを眺めてみたところ、それを行うには以下のことをすればいいんじゃないかということがなんとなく解ってきた。

そこで、perl Makefile.PL して生成された Makefile に対して、$(LD) を呼び出している行を、以下のような内容に書き換えてみた。

        $(LD) -out:$@ -MANIFEST -MANIFESTFILE:$@.intermediate.manifest $(LDDLFLAGS) $(LDFROM) $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) -def:$(EXPORT_LIST)
        $(MT) -outputresource:$@;#1 -manifest $@.intermediate.manifest -nologo

ちなみに $(MT) の為に、最初のほうに以下の行も入れた。

MT = mt

で、この状態で nmake して nmake install してみたんだが、結局状況変わらず。もちろん、%WINDIR%\system32 ディレクトリ下にコピーしていた msvc?80.dll ファイルの類はすべて削除していたんだが、「MSVCR80.DLL が見つからんよ」というエラーが出てこけてしまう。

いったい何がまずいんだろう。。。


Mon Dec 11 09:27:47 JST 2006 - 追記

動きますた。DLL の場合、リソース ID は 2 を選択しなければならないんだそうです。

つか、「mt.exe nmake」でぐぐったら一発で↑この記事が見つかったよ。最初からそうしてればよかった。。。

ちうわけで、Makefile は以下のように修正。。。

        $(LD) -out:$@ -MANIFEST -MANIFESTFILE:$@.intermediate.manifest $(LDDLFLAGS) $(LDFROM) $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) -def:$(EXPORT_LIST)
        $(MT) -outputresource:$@;2 -manifest $@.intermediate.manifest -nologo

よーするに mt.exe 呼び出し時のオプション -outputresource:$@;#1 としてたのを、-outputresource:$@;2 に直しただけです。番号記号 # もいらんかった。

これで、ActivePerl に Win32API::MIDI モジュールをインストールすることができました。こいつも ActivePerl で動作確認しますた。

で、こんな場当たり的な対策をモジュールインストールするたびにやってたんではキリがないので、h2xsMakefile.PL 生成する際に行っている処理 (ってどこに書いてあるんだ? h2xs.bat 本体でいいのかしら?) (←嘘、直すなら Makefile.PL が呼び出している ExtUtils::MakeMaker[LINK] モジュールだ) に対するパッチを書こうと思う。これは出来次第近いうちに公開するつもり。

[設計・開発]
[個人的メモ]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット