« FBX SDKを追加してみる | メイン | PerlMagickでMPEGファイルを作る »

2005年03月27日

吉里吉里2/KAG3ムービー拡張日誌:: 共有ライブラリ

    

うちでビルドした krmovie.dllでmsvcr71.dllがないとエラーが出ると言われたのでkrmovieのプロジェクトの設定を調査。
問題なさそうなので、BaseClassesのプロジェクトを調べると、プロジェクトの設定のコード生成のランタイム ライブラリ がマルチスレッド DLLになっていた。
マルチスレッドへ変更にし、ビルド後、krmovieの方もリビルド。
特定のライブラリの無視でLIBCMTD ( LIBCMT ) を設定しなくても良くなったようなので、設定からはずした。
たぶん、DirectX9に変えた時に、DX9の標準設定がそうなっていたのだろう。
確か、DX8を使っていた時は問題なかったはず。

msvcrt.dll と msvcr71.dll の相違点
msvcrt.dll は "known DLL"、つまり、Windows が所有および構築するシステム コンポーネントになりました。msvcrt.dll は、システム レベルのコンポーネントだけで使用されることを前提としています。アプリケーションでは msvcr71.dll を使用し、再配布する必要があります。システム ディレクトリには、msvcr71.dll のコピーを作成しないでください。また、既にコピーが存在する場合でも、使用しないでください。msvcr71.dll のコピーは、実行可能プログラムと共にアプリケーション ディレクトリに保存してください。/MD スイッチを使用して Visual C++ .NET で構築したアプリケーションはすべて msvcr71.dll を使用します。

MSDN C ランタイム ライブラリ より引用。

msvcr71.dll を使うように設定した方が良いかとも思ったが、アプリと共に配布し同じディレクトリに入れないといけないのならスタティックの方を使った方が良いかな。
にしても、なんか矛盾していると言うか、おかしな話と言うか。
DX9のDirectShowのBascClassesのデフォルトでmsvcr71.dll を使うようにしているので、msvcr71.dll はある種必須。
しかも、DirectShowのフィルタの.axファイルなどは、ほぼシステム ディレクトリに入るだろう。
つまり、システム ディレクトリ にmsvcr71.dll をコピーすることになるのではないか?
なんか変な話と言うか、不親切と言うか。

VCなどをインストールしていないマシンのシステム ディレクトリにはmsvcr71.dllが普通に入っていた。他にも71が付くDLLがいっぱい。
インストール時にシステム ディレクトリ にコピーするアプリはわんさかありそう。
ま、問題なく動いているからいいんだけどね。

それはともかく、この修正で本当にmsvcr71.dll が必要なくなったかどうか調べるにはクリーンインストールしたマシンが必要だな。
面倒だけど、使っていない古いマシンに入れるか。



投稿者 Takenori : 2005年03月27日 00:10




comments powered by Disqus
Total : Today : Yesterday : なかのひと