Linux と Windows で構築されるクロスプラットフォーム ソフトウェア プロジェクトの場合、サードパーティ ライブラリを処理するための明確な方法があります。Linux では、CentOS/RHEL ディストリビューションで配布されたバージョンに対してビルドおよびリンクします。つまり、リリース ビルドに対してリンクしますが、Windows では独自のサードパーティ ライブラリ「パッケージ」を維持し、Windows ではすべてのライブラリの 2 つのバージョンをビルドします。 msvcr100 と msvcp100 をリンクするリリース バージョンと、msvcr100d と msvcp100d をリンクするデバッグ バージョンです。
私の質問は、Windows でサードパーティの依存関係のデバッグ バージョンをビルドする必要があるかどうか、または独自のソフトウェアのデバッグ ビルドをビルドするときに /nodefaultlib:msvcr100 を使用できるかどうかということです。
フォローアップの質問: この点に関する優れた実践についてどこで学べますか? msvc ランタイムに関する MSDN ページを読みましたが、推奨事項に関してはほとんどありません。
編集:
質問をもっと簡潔に言い換えさせてください。VS2010 では、/MD でコンパイルされたライブラリとリンクするときに、/nodefaultlib:msvcr100 を使用して実行可能ビルドを /MDd とリンクする際の問題は何ですか。
これに対する私の動機は、私が使用するサードパーティ ライブラリのリリース バージョンとデバッグ バージョンの両方をビルドする必要がないようにすることです。また、デバッグ ビルドをより高速に実行したいと考えています。
/MD、/MT、/LD のドキュメントから (ランタイム ライブラリを使用):
MD:アプリケーションがランタイム ライブラリのマルチスレッドおよび DLL 固有のバージョンを使用するようにします。_MT と _DLL を定義し、コンパイラがライブラリ名 MSVCRT.lib を .obj ファイルに配置するようにします。
このオプションでコンパイルされたアプリケーションは、MSVCRT.lib に静的にリンクされます。このライブラリは、リンカが外部参照を解決できるようにするコード層を提供します。実際に動作するコードは MSVCR100.DLL に含まれており、MSVCRT.lib にリンクされたアプリケーションが実行時に利用できる必要があります。
/MDd: _DEBUG、_MT、および _DLL を定義し、アプリケーションがランタイム ライブラリのデバッグ マルチスレッドおよび DLL 固有のバージョンを使用するようにします。また、コンパイラはライブラリ名 MSVCRTD.lib を .obj ファイルに配置します。
そのため、_DEBUG が定義されている以外に、生成されたコードに行われた違いについてのドキュメントはありません。