web-dev-qa-db-ja.com

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

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

    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).

「デバッグ」->「Windows」->「モジュール」に移動すると、それらのpdbファイルなどが見つかりません。それらのファイルがこことここにあると彼に言うにはどうすればいいですか?管理者としてMSvisualを実行しようとしましたが、それも役に立ちませんでした。 Microsoftサーバーを使用してpdbファイルをロードしましたが、助けにもなりませんでした。

113
Qbunia

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

_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をリンクしたり、その逆をしないでください!

136
AJG85

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

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

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

  • ツリーでConfiguration Properties/C C++/Code Generationを選択します
  • オプションRuntime Libraryは、すべての依存関係プロジェクトとアプリケーションで同じに設定されます。
94
Francis Pierot

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

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

_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;

デバッグでプロジェクトBを再構築してから、リリースでプロジェクトAを構築すると、正しくリンクされるはずです。

19

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

10
stoney

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

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

私もこの問題を抱えていました。

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

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

7
ArtHare

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

3
AlexT

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

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

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

2
Ionut V.

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

2
Andrey

これを試してください:Goto project property-> C/C++-> Code generation-> Runtime Library Select from combobox value:Multi-threaded DLL(/ MD)それは私のために働く:)

2
Phạm Mạnh

opencv_core245.lib(dxt.obj):エラーLNK2038:「_ITERATOR_DEBUG_LEVEL」の不一致が検出されました:値「0」がtest.objの値「2」と一致しませんこのようなエラーが発生しました。
Linker-> Input-> Additional dependencにopencv_core245.libとopencv_core245d.libがあります。この2つは競合していたため、最初に1つopencv_core245.libを削除しました。エラーがなくなりました。

2
Vinit M

「Additional Library Directory」の修正に関する問題を解決しましたが、これは「$(SolutionDir)\ Release」の表示が間違っていたため、「$(SolutionDir)\ $(IntDir)」で変更しました

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

これが同じトラブルを抱えている人々を助けることを願っています;)

1
ThierryV

今日同じ問題が発生しました(VS2010)。 Win32、次にデバッグをビルドしようとしました| Win32、およびこのメッセージを受け取りました。

デバッグをクリーニングしてみました| Win32ですが、エラーは引き続き発生します。その後、リリースをクリーンアップしました| Win32、次にデバッグをクリーンアップ| Win32、そしてそれはうまく構築されました。

1
GilesDMiddleton

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

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

1
JTatie

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

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

1
Alstrice

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

0
Alyoshak

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

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

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

0
Chris Woolfe

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

エディターで.libファイルを開き(PSPadを使用し、Windowsのメモ帳も使用可能)、_ ITERATOR_DEBUG_LEVEL = 2から_ ITERATOR_DEBUG_LEVEL =のすべての出現箇所を置き換えます

0
napets

他のすべての答えと同様に、私はConfiguration Properties -> C/C++ -> Preprocessorディレクティブをチェックしました。
私の場合、リリースでNDEBUGが正しく定義されていましたが、_SECURE_SCL=1もありました。

これを削除すると問題が修正されました。

0
Coxy