web-dev-qa-db-ja.com

リンカーエラーLNK2038:リリースモードで不一致が検出されました

Win XPとVS 2005からWin 7とVS 2010に私の小さなアプリを移植しようとしています。

アプリはデバッグモードでコンパイルおよびスムーズに実行されますが、リリースモードでは次のエラーが発生します。

pcrecpp.lib(pcrecpp.obj) : error LNK2038: mismatch detected for 
'_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in LoginDlg.obj

どこからチェックを始めるべきですか?

37
Wartin

アプリはリリースモードでコンパイルされていますが、/ MTd(または同様の)セットが設定されているデバッグバージョンのPCREにリンクしているため、CRTのイテレータデバッグレベルで不一致が発生します。

独自のアプリケーションに合わせて、リリースモードでPCREを再コンパイルします。

detect_mismatchプラグマ VS 2010では、このエラーが発生します。

http://blogs.msdn.com/b/vcblog/archive/2009/06/23/stl-performance.aspx (_ITERATOR_DEBUG_LEVELを検索)を参照してください

36
Alex Budovski

同じエラーが発生しました。私の場合、ソリューションは簡単です。別のプロジェクトBに依存する1つのプロジェクトAがありました。Bはデバッグモードでプリプロセッサ定義_DEBUGを持っていましたが、Aにはありませんでした。

_DEBUGをプロジェクトA(project-> properties-> c ++-> preprocessor-> preprocessor definition)に追加するだけで完了です。

19
Thomas

これは、プリプロセッサ定義_HAS_ITERATOR_DEBUGGING=0はプロジェクトBであり、Aではなく、AがBが使用するlibを生成します。

3
Art

私の問題は、依存プロジェクトが「マルチバイト文字セットを使用」を使用したことでした
Generl-> Character setの下。他のプロジェクトには「設定なし」の値がありましたが

3
Roman Bober