PDA

Visualizza la versione completa : [c++]problema SECURE_SCL e _HAS_ITERATOR_DEBUGGING


giuseppe500
21-08-2012, 23:00
ciao, ho un progetto in cui mi sono incasinato , Ŕ composto di 4 .lib incluse dalla mia applicazione.
Non so cosa ho combinato ma adesso mi becco un casino di errori:
2>Wm5WglGraphics100d.lib(Wm5PixelShader.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in ClodMeshes_moc.obj

ho letto sul sito microsoft la documentazione , ma non riesco a saltarci fuori.
nelle librerie penso devo includere come proprietÓ sotto c++ -> preprocessing:

_SECURE_SCL 1;_ITERATOR_DEBUG_LEVEL 1

e le ho incluse , nel mio progetto , ma non riesco a capire perchŔ non funziona.
uso vs 2010 sp1.
gli errori del tipo sopra sono piu di 100.

grazie.

ps.nell' editor delle proprietÓ del progetto come devo inserire il valore delle preprocessor?
cosi':
_SECURE_SCL 1;_ITERATOR_DEBUG_LEVEL 1
o
cosi' :
_SECURE_SCL = 1;_ITERATOR_DEBUG_LEVEL = 1



grazie.

giuseppe500
21-08-2012, 23:48
ho trovato questa macro su

_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCHlink (http://daikof622.wordpress.com/2011/09/02/error-lnk2038-mismatch-detected-for-_iterator_debug_level-value-2-doesnt-match-value-0-in-xxx-obj/)

a me sembra funzionare , la ho messa in tutte le direttive del preprocessore delle .lib.
cosa fa precisamente Ŕ spiegato nel link.

grazie.

ciao

MItaly
22-08-2012, 00:47
Non mi pare una buona idea, credo che usando un'opzione del genere in caso di passaggio di iteratori o container tra una libreria e l'altra si possano avere seri problemi. Piuttosto, la soluzione corretta Ŕ impostare il medesimo livello di debug degli iteratori per tutte le librerie. Non Ŕ che stai compilando il progetto principale in modalitÓ debug ma lo linki con le librerie compilate in modalitÓ release o robe di questo genere?

giuseppe500
22-08-2012, 12:43
mi spiace di aver postato un errore , pensavo andasse bene.
Puttosto come devo settare le 3 macro _ITERATOR_DEBUG_LEVEL , _SECURE_SCL e _HAS_ITERATOR_DEBUGGING nelle librerie e nel progetto?
e come assegno un valore a una macro dalla finestra delle proprietÓ c++->preprocessor? con l' = va bene? ad es:
_ITERATOR_DEBUG_LEVEL = 1;

grazie

Loading