web-dev-qa-db-ja.com

Visual Studioでの_ITERATOR_DEBUG_LEVELエラー

Windows 7のVisual Studio 2010でJRTPLIBをコンパイルしようとしています。これは本当に悪夢です...でも、少なくとも問題を絞り込んでいます。

これは残っています。

Error   3   error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in client.obj   C:\Users\Johan-bar\Documents\Visual Studio 2010\Projects\client\client\jrtplib.lib(rtpsession.obj)  client

私はトンをググっていましたが、原因の1つはデバッグモードでコンパイルされ、もう1つはリリースモードでコンパイルされたようです。

別のコンピューターでテストしたいので、リリース実行可能ファイルをコンパイルすることを目指しています。

1)リリースモードではないもの、JRPPLIBまたはクライアント(私のもの、コンパイルしようとしているもの)?

2)ITERATOR_DEBUG_LEVELをどのように変更しますか?どちらも、ランタイムライブラリ/ MTとプリプロセッサ定義WIN32、_MT、および私が推測するデフォルトを使用しています。

乾杯

21
KaiserJohaan

-D_ITERATOR_DEBUG_LEVEL = 0オプションを使用して、使用するすべてのものをコンパイルします。 VS 2010リリースモードではデフォルトでそのようになっていますが、一部はまだ他のオプションでビルドされているため、バイナリ互換ではありません。

古いビジュアルスタジオには_SECURE_SCLがありましたが、一部のコードでそれをまだ使用できるかどうかはわかりません。これらが一致する静的チェックをどこかに(たとえばstdafx.hに)入れます。

#if _ITERATOR_DEBUG_LEVEL == 0 && _SECURE_SCL != 0 
#error _SECURE_SCL != 0 when _ITERATOR_DEBUG_LEVEL == 0 
#endif 

_ITERATOR_DEBUG_LEVELの値を確認したい場合は、#pragmaメッセージをコードで使用して通知できます。

13
Öö Tiib

ソリューション:

Project Pages >> Configuration Properties >> C,C++ >> Preprocessor >> Preprocessor Definitions

追加 _ITERATOR_DEBUG_LEVEL=0が動作しました。参照: VS2010で_ITERATOR_DEBUG_LEVELを設定する方法?

9
RIK

これらのエラーを生成する別の方法を見つけました。

Visual Studio 2010バッチビルドを使用して、プラットフォームと構成の考えられるすべての組み合わせをビルドしていましたが、これらのエラーが発生していました。出力を見ると、バッチビルドがプロジェクトの依存関係を尊重していないことがわかりました。つまり、リリースビルドの古いライブラリを、新しくコンパイルされたデバッグobjファイルにリンクしています。

ビルド出力の数行後、ライブラリのデバッグバージョンをビルドしました。

「バッチビルド」を手動で(つまり、プラットフォームと構成のさまざまな組み合わせを手動で選択して)実行すると、クリーンビルドが生成されました。

モラル:Visual Studio 2010バッチビルドを使用しないでください。それ以降のバージョンのVSでこれが修正されたかどうかはわかりません。

0
Dale Wilson