147 votes

erreur LNK2038: incompatibilité détectée pour '_ITERATOR_DEBUG_LEVEL': la valeur '0' ne correspond pas à la valeur '2' dans main.obj

J'ai lu beaucoup de solutions à mon problème mais rien aidé. J'ai essayé de les nettoyer, de les reconstruire. Réinstallé visual 2010 et changer de professionnel à l'ultime. Mais encore, je ne sais pas pourquoi j'ai cette erreur. Mon projet ressembler à ceci: 1 Exe Solution pour tester ma bibliothèque statique. 1 Dll Solution statique de la bibliothèque. Le Code qui est ensuite converti en fichier dll à l'aide de la fonction à partir du 1 lib appelé ClassificationFramework. J'ai fourni cette lib que les en-têtes et du rpc, donc en gros le code source. Dans Exe solution que j'ai lié ma bibliothèque généré + quelques autres libs pour l'exécuter + ClassificationFramework.dll. Tout fonctionne bien lorsque j'utilise la Libération, mais lorsque je change de Debug (parce que je veux debug quelques trucs, je suis fatigué de sauter le débogueur en mode release) j'obtiens ceci:

    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

Quand je construis dans la Version j'ai aussi reçu ces avertissements:

    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

J'ai trouvé que le Débogueur saute à cause d'un mauvais chemin d'accès aux fichiers 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).

Quand je vais à Déboguer->Windows->Modules je vois qu'il ne peut pas trouver ces fichiers pdb ou quelque chose. Comment je peux lui dire que ces fichiers sont ici, ici et ici? J'ai essayé d'exécuter MSvisual en tant qu'administrateur, mais il na pas aider. J'ai utilisé microsoft serveur pour charger des fichiers pdb, mais aussi na pas aider.

166voto

AJG85 Points 7689

Dans VS2010 itérateur niveau de débogage par défaut 2 en debug et il est désactivé dans le communiqué. L'un des dll que vous utilisez probablement a itérateur de débogage éteint en debug, soit parce qu'il a été construit dans une ancienne version de visual studio ou ils explicitement ajouté la définit pour le projet.

Recherche pour _ITERATOR_DEBUG_LEVEL et _SECURE_SCL de les supprimer ou de les définir de manière appropriée dans tous les projets et les sources et tout reconstruire.

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

En bref, vous êtes probablement mélange release et debug dll. N'est pas lié version dll de débogage ou vice-versa!

111voto

Francis Pierot Points 401

Je fais une petite mise à jour sur cette question, car je viens d'avoir la même erreur aujourd'hui sur une application qui est relier à l'encontre d'une lib statique, après que j'ai effectué la migration de l'ancien Visual 6 projet de Visual Studio 2012.

Dans mon cas, l'erreur est que j'ai tort compilé la version de la lib statique avec /Tdm au lieu de /MD, alors que la demande est /MD dans le communiqué. Le réglage de l' /MD dans la lib statique projet a résolu le problème.

Cela se fait dans les propriétés du Projet

  • Sélectionnez les Propriétés de Configuration / C++ / Génération de Code dans l'arbre
  • et l'option de la Bibliothèque d'Exécution défini de la même façon sur tous vos dépendances des projets et de l'application.

29voto

Si vous voulez délibérément le lien de votre projet dans Un Communiqué contre un autre projet B en Debug, dire pour conserver les avantages de performance de votre application pendant le débogage, alors vous aurez probablement atteint cette erreur. Vous pouvez résoudre ce problème en modifiant temporairement le préprocesseur drapeaux de projet B pour désactiver l'itérateur de débogage (et de faire correspondre à Un projet):

Dans le Projet B "Debug" propriétés, les Propriétés de Configuration -> C/C++ -> Préprocesseur, ajoutez ce qui suit Définitions de Préprocesseur:

_HAS_ITERATOR_DEBUGGING=0;_ITERATOR_DEBUG_LEVEL=0;

Projet de reconstruction de B dans le Débogage, puis de construire Un projet de Libération et il devrait relier correctement.

11voto

stoney Points 41

J'avais un décalage entre les projets: l'un avec un jeu de caractères multi-octets, l'autre avec Unicode. Corriger ces problèmes pour s’accorder sur Unicode a corrigé le problème.

10voto

Aviad Rozenhek Points 501

L'erreur peut être provoquée en mélangeant les versions de débogage et de version dans le même exécutable ou la même DLL.

  1. Dans le gestionnaire de configuration vs, certains de vos projets sont-ils en mode débogage et d'autres en mode édition?
  2. le symbole de préprocesseur DEBUG ou _DEBUG est-il défini dans l'un de vos projets de version?
  3. l'un de vos projets de débogage a-t-il défini le symbole de préprocesseur NDEBUG?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X