2010-11-02 8 views
32

Mi sono appena spostato su una soluzione di Visual Studio (C++) su un altro computer, ho installato tutte le directory e le impostazioni per quanto posso vedere e ho fatto un pulire/ricostruire sulla soluzione. Ottengo l'errore sopra riportato su un gruppo di .obj in fase di compilazione, non so cosa fare al riguardo._iterator_debug_level value '0' non corrisponde al valore '2'

risposta

26

Sembra che si stiano mescolando file oggetto creati con impostazioni diverse. Prova a eseguire una ricostruzione completa e controlla tutte le impostazioni del file di progetto per assicurarti che la macro _ITERATOR_DEBUG_LEVEL sia la stessa (ad esempio, non stai mischiando debug e rilascia oggetti creati).

+4

Per qualche motivo uno dei miei progetti aveva _SECURE_SCL = 1 definito in modalità di rilascio e questo ha causato l'errore del linker. – Gyuri

+0

Un'altra possibilità è un file di progetto/sorgente che definisce _HAS_ITERATOR_DEBUGGING – korbes

16

I binari di missaggio (file oggetto) sono una delle ragioni; un altro (che ho incontrato) è la falsa definizione della macro _DEBUG nella build di rilascio. _DEBUG non è una macro standard, ma viene utilizzata da Microsoft.

Dopo aver modificato il -file .vcxproj in Emacs ho sbagliato a scrivere _DEBUG invece di NDEBUG per la liberazione, e incontrato esattamente lo stesso errore di generazione.

+0

bang su ...... :) – Sandip

13

In alcuni casi, mescolando le opzioni in

Proprietà> Proprietà di configurazione> C/C++> Generazione codice> Runtime Biblioteca

Tra incluso Biblioteca (i) e attualmente il progetto di lavoro può causare questo problema.

Dipende dall'uso impostarlo come /MD o /MT o /MDd o /MTd in modo uniforme in tutti i progetti.

+0

Grazie, ha funzionato. – lourencoccc

0

Ho scoperto (stranamente) che _CRT_NON_CONFORMING_SWPRINTFS lo causa. Quando lo rimuovo, non ottengo "_iterator_debug_level value '0' non corrisponde al valore '2'" ma invece il seguente avviso:

Errore di errore 6 C4996: '_swprintf': swprintf è stato modificato per conformarsi con lo standard ISO C, aggiungendo un parametro conteggio caratteri extra. Per utilizzare il tradizionale swprint di Microsoft, impostare _CRT_NON_CONFORMING_SWPRINTFS.

0

Ho cercato di risolvere questo problema per cinque giorni. Il codice PCL (Point Cloud Library) viene compilato correttamente in modalità di debug ma non riesce nella modalità di rilascio.

Ho riconfigurato la mia libreria più volte ma non ha aiutato. Ho scoperto che il problema era che la versione di rilascio ereditava _DEBUG, quindi l'ho deselezionata in Proprietà del progetto >> Preprocessore >> Definizioni del processore ed è stata risolta.

Problemi correlati