エラーLNK2038: '_ITERATOR_DEBUG_LEVEL'の不一致が検出されました:値 '0'はmain.objの値 '2'と一致しません


131

私は自分の問題に対する多くの解決策を読みましたが、何の助けにもなりませんでした。私はきれいにして、再構築してみました。ビジュアル2010を再インストールし、プロから究極に変更。しかし、それでもなぜこのエラーが発生するのかわかりません。私のプロジェクトは次のようになります。静的ライブラリをテストする1つのExeソリューション。1 Dll Solution静的ライブラリ。dllに変換されるコードは、ClassificationFrameworkと呼ばれる1 libの関数を使用しています。このlibをヘッダーとcppとして提供したので、基本的にはソースコードです。Exeソリューションでは、生成されたライブラリ+他のいくつかのライブラリをリンクして実行しました+ ClassificationFramework.dll。リリースを使用するとすべてが正常に機能しますが、デバッグに変更すると(いくつかのものをデバッグしたいため、リリースモードでデバッガーをスキップするのにうんざりしています)、次のようになります。

    2>Link:
    2>  ClassificationFramework.lib(SampleClass.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance
    2>ClassificationFramework.lib(SampleClass.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
    2>ClassificationFramework.lib(SampleNamesSet.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
    2>ClassificationFramework.lib(SampleSet.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
    2>ClassificationFramework.lib(DirectoryReader.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
    2>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
    2>C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Debug\Tester.exe : fatal error LNK1319: 4 mismatches detected

私がリリースでビルドするとき、これらの警告も受け取りました:

    1>Link:
    1>  Generating code
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(101): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because ptimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\directoryreader.cpp(30): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\xstring(1589): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\samplenamesset.cpp(226): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\directoryreader.cpp(60): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\samplenamesset.cpp(199): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\sampleset.cpp(27): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\samplenamesset.cpp(59): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>  Finished generating code
    1>ClassificationFramework.lib(SampleSet.obj) : warning LNK4099: PDB 'vc100.pdb' was not found with 'ClassificationFramework.lib(SampleSet.obj)' or at 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Release\vc100.pdb'; linking object as if no debug info
    1>ClassificationFramework.lib(SampleNamesSet.obj) : warning LNK4099: PDB 'vc100.pdb' was not found with 'ClassificationFramework.lib(SampleNamesSet.obj)' or at 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Release\vc100.pdb'; linking object as if no debug info
    1>ClassificationFramework.lib(SampleClass.obj) : warning LNK4099: PDB 'vc100.pdb' was not found with 'ClassificationFramework.lib(SampleClass.obj)' or at 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Release\vc100.pdb'; linking object as if no debug info
    1>ClassificationFramework.lib(DirectoryReader.obj) : warning LNK4099: PDB 'vc100.pdb' was not found with 'ClassificationFramework.lib(DirectoryReader.obj)' or at 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Release\vc100.pdb'; linking object as if no debug info
    1>  Tester.vcxproj -> C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Release\Tester.exe

pdbファイルへのパスが正しくないため、デバッガーがスキップすることがわかりました。

'Tester.exe': Loaded 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Work\Release\Tester.exe', Symbols loaded.
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'Tester.exe': Unloaded 'C:\WINDOWS\SysWOW64\kernel32.dll'
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\ntdll.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\OpenCV2.2\bin\opencv_core220.dll', Binary was not built with debug information.
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\msvcp100.dll', Symbols loaded.
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\msvcr100.dll', Symbols loaded.
'Tester.exe': Loaded 'C:\OpenCV2.2\bin\opencv_highgui220.dll', Binary was not built with debug information.
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\user32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\gdi32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\advapi32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\secur32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\ole32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\msvcrt.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.3790.4770_x-ww_A689AB02\comctl32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\avifil32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\winmm.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\msacm32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\msvfw32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\shell32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\shlwapi.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\avicap32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\version.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\OpenCV2.2\bin\opencv_imgproc220.dll', Binary was not built with debug information.
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\imm32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\lpk.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\usp10.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\WinSxS\wow64_Microsoft.Windows.Common-        Controls_6595b64144ccf1df_6.0.3790.4770_x-ww_8D2E3180\comctl32.dll', Cannot find or open the PDB file
The program '[4984] Tester.exe: Native' has exited with code 0 (0x0).

Debug-> Windows-> Modulesに移動すると、pdbファイルなどが見つからないことがわかります。これらのファイルがこことここにあると私はどうやって彼に言うことができますか?管理者としてMSvisualを実行しようとしましたが、それも役に立ちませんでした。Microsoftサーバーを使用してpdbファイルをロードしましたが、役に立ちませんでした。

回答:


148

VS2010では、イテレータのデバッグレベルはデバッグではデフォルトで2になり、リリースでは無効になっています。古いバージョンのVisual Studioでビルドされたか、明示的にプロジェクトに定義を追加したため、使用しているDLLの1つでデバッグのイテレーターデバッグがオフになっている可能性があります。

それらを検索し_ITERATOR_DEBUG_LEVEL_SECURE_SCL削除するか、すべてのプロジェクトとソースで適切に設定して、すべてを再構築します。

_ITERATOR_DEBUG_LEVEL = 0 // disabled (for release builds)
_ITERATOR_DEBUG_LEVEL = 1 // enabled (if _SECURE_SCL is defined)
_ITERATOR_DEBUG_LEVEL = 2 // enabled (for debug builds)

つまり、リリースdllとデバッグdllを混在させることになります。デバッグでリリースdllをリンクしない、またはその逆!


6
.hまたは.cppファイルに_ITERATOR_DEBUG_LEVELまたは_SECURE_SCLのいずれも表示されません。これらはobjファイルにのみ存在します。/ FAILIFMISMATCH: "_ ITERATOR_DEBUG_LEVEL = 0"
Qbunia

リリースのデバッガーによるブレークポイントのスキップについてはどうですか?一部のブレークポイントは満たされておらず、最適化または次のようなリンクのためにデバッガーがそれらを回避すると述べています
Qbunia

42
「要するに、おそらくリリースdllとデバッグdllが混在している」と私を助けてくれました。ありがとう!
最大

2
ワイワイウェイト!MSVCを使用している場合、デバッグビルドを取得するには、すべての依存関係を再コンパイルする必要があることを教えてください。デバッグしたくないものでも?なんてことだ!信じられない!
マイケル

1
「要するに、おそらくリリースdllとデバッグdllが混在している」->私の場合、RuntimeLibraryは、MultiThreadedDLLであるはずのリリースビルドのMultiThreadedDebugDLLでした。
キャプテンノーマル

108

古いVisual 6プロジェクトをVisual Studio 2012に移行した後、静的ライブラリにリンクしているアプリケーションで今日同じエラーが発生したため、この問題を少し更新します。

私の場合のエラーは、静的バージョンのリリースバージョンを/ MDではなく/ MDdで誤ってコンパイルしたことですが、アプリケーションは/ MDリリースです。静的libプロジェクトで正しい/ MDを設定すると、問題が解決しました。

これはプロジェクトのプロパティで行われます

  • 選択構成プロパティ/ C ++ C /コード生成ツリーで
  • オプションのランタイムライブラリは、すべての依存関係のプロジェクトとアプリケーションで同じに設定されています。

21

リリースのプロジェクトAをデバッグの別のプロジェクトBに意図的にリンクしたい場合は、デバッグ中にアプリケーションの全体的なパフォーマンス上の利点を維持するために、このエラーが発生する可能性があります。これを修正するには、プロジェクトBのプリプロセッサフ​​ラグを一時的に変更して、イテレータのデバッグを無効にします(プロジェクトAに一致させます)。

プロジェクトBの[デバッグ]プロパティ、[構成プロパティ]-> [C / C ++]-> [プリプロセッサ]で、[プリプロセッサ定義]に以下を追加します。

_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;

デバッグでプロジェクトBを再ビルドし、リリースでプロジェクトAをビルドすると、正しくリンクされます。


11

プロジェクト間でミスマッチがありました。1つはマルチバイト文字セット、もう1つはUnicodeです。これらをUnicodeに同意するように修正すると、問題が修正されます。


2
私が構築しようとしていたプロジェクトにこの問題があり、デバッグで予期しない欠落したプリプロセッサがあったことがわかりました:_DEBUG。forums.codeguru.com/…を
JGeerWM '18

Matlabでも同様の問題が発生しましたが、その逆です。合意を得るために、VS2013ビルドをマルチバイトに変更する必要がありました。これにより、RuntimeLIbraryの不一致も解決されました。
barnhillec 2015

10

このエラーは、デバッグビルドとリリースビルドを同じ実行可能ファイルまたはDLLに混在させると発生する可能性があります。

  1. vs構成マネージャーで、デバッグモードのプロジェクトとリリースモードのプロジェクトがありますか?
  2. リリースプロジェクトの1つに、プリプロセッサシンボルDEBUGまたは_DEBUGが定義されていますか?
  3. デバッグプロジェクトの1つにプリプロセッサシンボルNDEBUGが定義されていますか?

7

私にもこの問題がありました。

私の問題は、デバッグ構成からライブラリインクルードディレクトリをコピー/貼り付けていたことです。

したがって、プロジェクト「Indep」には、リリースであっても、「../ Debug」からの静的ライブラリ「Dep.lib」が含まれていました。修正は、ライブラリディレクトリを「../Release」に変更することでした。そのため、以前にビルドされたデバッグライブラリではなく、リリースビルドされたライブラリを取得しました。


同様の問題がありました。リリースまたはデバッグに関係なく、静的libが同じ場所に配置されました。その場合、「d」などを追加することで、異なる名前を付ける必要があります。そうしないと、デバッグ/リリースを切り替えるたびに、libを再構築する必要があります。
yau

4

デバッグライブラリとリリースライブラリで同じ問題が発生しました。間違いは、ソリューションプロパティ/構成プロパティ/構成にありました。

プロジェクト構成がメイン構成/プラットフォームと一致しませんでした。


3

C ++プロジェクトプロパティ(リリース構成用)で_DEBUGをNDEBUGマクロ定義に変更してみてください。構成プロパティ-> C / C ++->プリプロセッサ->プリプロセッサ定義


3

ラストチャンス(他の方法が機能しない場合):すべてのプロジェクトで_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCHマクロを定義します。CRTヘッダーで使用される「#pragma detect_mismatch」機能を無効にします。


私はこのページのほとんどすべてを試しました、そして、これがうまくいった唯一のものでした。の_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH下に追加しC/C++ >> Preprocessor >> PreprocessorDefinitionsます。
Contango

2

opencv_core245.lib(dxt.obj):エラーLNK2038: '_ITERATOR_DEBUG_LEVEL'の不一致が検出されました:値 '0'がtest.objの値 '2'と一致しませんこのようなエラーが発生しました。
リンカー->入力->追加の依存関係にopencv_core245.libとopencv_core245d.libがあります。この2つは矛盾しているため、最初の1つをopencv_core245.libから削除しました。エラーが発生しました。


2

これを試してください:Gotoプロジェクトプロパティ-> C / C ++->コード生成->ランタイムライブラリコンボボックスの値から選択:マルチスレッドDLL(/ MD)これは私のために機能します:)


2

私の場合、デバッグとリリースの両方で、解決策はソリューション全体をクリーンアップしてから再構築することでした。

編集:私の場合もtrue(VS2017)ステップ1:プロジェクトをクリーンアップします。step2:構成モードを変更します(デバッグからリリース、またはその逆)。ステップ3:プロジェクトをクリーンアップします。step4:必要な構成モードでビルドします。

PS:構成モードを変更するには、ビルドメニューで構成設定を見つけます


1

今日(VS2010)同じ問題が発生し、リリースをビルドしました。Win32、それからデバッグをビルドしてみました| Win32、そしてこのメ​​ッセージを受け取りました。

デバッグをクリーニングしてみました| Win32でもエラーは解決しません。次に、リリースをクリーニングしました。Win32、次にデバッグをクリーンアップ| Win32、それからそれはうまく構築されました。


1

プロジェクトプロパティ->リンカー->入力->追加の依存関係(VC10)で依存ライブラリをデバッグバージョンに変更することで、このエラー(私の場合はOgre3D + Bulletを使用)を取り除くことができました。

BulletCollision.libをBulletCollision_debug.lib(デバッグ構成用)に変更してコンパイルしました。


1

「追加ライブラリディレクトリ」を修正する際の問題を解決しました。これは「$(SolutionDir)\ Release」を示すのが間違っていたので、「$(SolutionDir)\ $(IntDir)」で変更しました

これを修正するには、プロジェクトのプロパティを開きます->構成プロパティ->リンカー->一般->追加のライブラリディレクトリ

私はこれが同じ問題を抱えるいくつかの人々を助けることを願っています;)


私にとってデバッグは問題なく動作しますが、リリースのビルド時に上記のエラーが発生します...追加のライブラリディレクトリを開きました:C:/ Program Files / PCL 1.8.1 / lib / $(Configuration)次に何を追加すればよいですかここに?
sqp_125

0

私もこの問題を抱えていましたが、プロジェクトを作り直し、依存するプロジェクトで参照することでリンクし直すのを忘れたために発生しました。

したがって、新しいプロジェクトではなく古いプロジェクトを参照してリンクしていました。

以前にリンクされたプロジェクトを参照によって再追加する際にバグがあることを知っておくことが重要です。vcxproj内の参照を手動で削除する必要があります。そうしないと、参照を再度追加できません。これはmsdnによるとVisual Studioの既知の問題です。


0

同様の問題がありましたが、ソースのないextern .libファイルに間違った設定がありました。ソースファイルがない場合、最も簡単な回避策は、.libファイルの内容を変更することです。

エディターで.libファイルを開き(PSPadを使用しました。Windowsのメモ帳でも可能です)、_ ITERATOR_DEBUG_LEVEL = 2すべて_ITERATOR_DEBUG_LEVEL = 0に置き換えます


0

私の場合、「プリプロセッサ定義」のNDEBUGマクロ定義を_DEBUGに変更する必要がありました。質問に記載されているものとまったく同じエラーについて不満を述べていた.exeで使用する静的ライブラリを構築しています。構成プロパティ(「プロジェクト」メニュー、「プロパティ」メニュー項目)に移動し、C / C ++セクション、その下のプリプロセッサセクションをクリックし、NDEBUGが_DEBUGに変更されるようにプリプロセッサ定義を編集します( exeでの設定)。


0

他のすべての回答と同様に、私は自分のConfiguration Properties -> C/C++ -> Preprocessorディレクティブをチェックしました。
私の場合NDEBUG、Releaseで正しく定義されていましたが、以下も持っていました。_SECURE_SCL=1

その1つを削除すると、問題が修正されました。


-1

上記のヘルプへの小さな追加:VST 2017を使用して静的libを古いVSTソリューションに追加した後、不一致エラーが発生しました。VSTは、次の2行を含むプリコンパイル済みヘッダー用に「stdfax.h」を生成します。

// Turn off iterator debugging as it makes the compiler very slow on large methods in debug builds
#define _HAS_ITERATOR_DEBUGGING 0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.