C++ と Visual Studio のデバッグ モードでコンパイルされたライブラリ (静的 .lib) があり、リリース モードでコンパイルされるプロジェクトでそれを使用したいと考えています。これは可能ですか?リリース モードでライブラリをコンパイルできませんでした :(
もう少し一般的な質問をさせてください。
2 に答える
Visual Studio (2005 以降) では、STL コンテナーやイテレーターなどのクラスは、既定で、デバッグ モードとリリース モードで異なる方法で定義され、異なるメモリ レイアウトを持ちます。そのようなクラスのデバッグ バージョンとリリース バージョンを静的ライブラリとリンクする (またはそのようなクラスを含むインターフェイスを持つ動的ライブラリを呼び出す) ことによって混在させると、問題が発生します。
私は、MSVS 2005 と 2008 ではコードがリンクされ、実行時に不可解なクラッシュが発生し、MSVS 20010 と 2012 ではコードがリンクに失敗すると確信していますが、100% 確信はありません。
デバッグ モードでコンパイルする場合、マクロ_SECURE_SCLを 0 として定義することにより、Visual Studio で STL コンテナーと反復子のリリース バージョンを使用するように強制できます。
デバッグ モードでコンパイルされたライブラリをリリース モードのプロジェクトにリンクすることはできますか?
はい。デバッグ モードは、アサーション、デバッグ シンボルなどが含まれていることのみを意味します。ライブラリのデバッグ バージョンは、リリース バージョンと同様に完全に機能する必要があります (ただし、リリース ビルドよりも実行速度が遅くなったり、メモリを消費したりする可能性があります)。
編集: David Rodriguez-dribeas が指摘するように、インライン関数の定義がリリース モードとデバッグ モードで異なる場合、1 つの定義規則に違反するため、未定義の動作が発生する可能性があります。
ライブラリを使用する場合、どのような考慮事項を考慮する必要がありますか?
それは広すぎて、StackOverflow で回答できません。