私は最近Linux/gccからVisual Studio 2005でWindows上に移植するためのC++アプリケーションを用意しています。このアプリケーションは、最適化されたCRT DLLを使用するDLLのみを提供するサードパーティライブラリを使用しますすなわち、それらはデバッグCRT DLLにリンクする等価物を提供しない)。 VS2005では、これは問題ではないようでした=デバッグビルドでは、System32ディレクトリに最適化されたCRT DLLが見つかりました。デバッグビルドアプリケーションのリリースCRTアセンブリのリリース
VS2008でアプリケーションをビルドして実行しようとしていますが、最適化されたCRT DLL(msvc690.dll)が見つからないため、デバッグビルドが失敗します。 VC9 CRT DLLは、GUIDスタイル名のディレクトリ内にあります。これはサイドバイサイドアセンブリであり、アプリケーションはそのマニフェストを使用して位置を特定すると考えられます。しかし、アプリのexeファイルに建てられ、埋め込まますマニフェストは、デバッグCRTアセンブリを指定します。
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
私は、Windowsの専門家ではない(より少なくともいない)ので、これはすべて私に新しく追加されました。ここで正しい解決策は何ですか?マニフェストコンパイラに、最適化されたCRT DLLをアセンブリに追加するように指示する必要がありますか?もしそうなら、私はこれをどのようにするのですか?
Doh、私はmsvcr90.dllを意味しました。サードパーティのDLLには、それ自身のマニフェストが含まれていません。 Dep Walkerで開くと、msvcr80.dllに依存します。さらなる調査の後、私はこのサードパーティーのlibが赤ちゃんだと思う。私たちのライブラリの1つは、デバッグと最適化されたCRT DLLの両方にリンクしているようです。それは、第三者libに依存しているlibであることがあります。だから、それはまだ原因が判明しているかもしれませんが、私はプロジェクト設定を確実に精査しなければなりません。とにかく助けてくれてありがとう、私は多くの質問で戻ってくるかもしれない。 –
デバッグ構成のプロジェクト設定で、MSVCRT.libを明示的に除外しなければなりませんでした。この答えは、元の質問に正しく答えるように表示されているようにマークします。 –
第三者 "dlls"が実際に静的ライブラリでない限り、私は解決策があまり意味がないことを認めなければなりません。彼らがdllであれば、彼らはどちらの実行時のdllが必要かについてむしろ固執するべきです。サードパーティのDLLが既にリンクされているので、あなたのアプリケーションのリンカ設定を変更するべきではありません。 –