incompatibilité détecté pour "_ITERATOR_DEBUG_LEVEL': la valeur '0' ne correspond pas à la valeur '2'

Bâtiment avec VS2010, je suis en train de construire une lib qui provoque beaucoup de ces erreurs de lien:

error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2'

Résultant dans une situation où je dois navire à la fois une libération et une version de débogage de ma lib.
Je n'ai aucune raison d'expédier une version de débogage de la lib, et il gonfle la distribution binaire. Mais le code client construit en debug refuse de lien à l'encontre de ma liberté lib.

J'ai vu cette question apparaissent avant, mais ils ne semblent pas poser la bonne question.
Je comprends ce que cette erreur est, et pourquoi je l'obtenir (enfin, en quelque sorte; je ne sais pas précisément ce qui émet de la dépendance. Faites-vous?), mais ce que je veux savoir, c'est comment faire pour éliminer cette dépendance se produise dans ma lib?

De même pour les libs qui se plaignent quand contradictoires tubes sont utilisés, qui peuvent être évitées avec /Zl (Omettre la valeur par défaut nom de la bibliothèque à partir de fichiers de l'objet), il y a certainement un moyen d'éviter cette dépendance d'être émis dans mes libs trop?

Je veux simplement produire un seul optimisé lib, qui est capable de lier contre debug ou release code. Ce n'est pas important pour le client, le code de débogage de la bibliothèque. Presque pas de 3ème partie les bibliothèques livrées avec des versions debug et release. Comment est-ce que les vendeurs éviter ce problème?

Personne ne sait précisément quelles sont les causes de ce lien de dépendance, et comment puis-je désactiver entièrement, ou facteur de mon code?

avez-vous comprendre cela? Je ne considère pas les réponses ci-dessous en guise de réponses. Si vous êtes à la production d'une LIB pourquoi est-ce même lien dans le 1er? si vous produisez une DLL long w/ associé à l'importation LIB, alors les gens seront en mesure de l'utiliser si elles sont debug ou release.
Oui, j'ai mal compris le problème. C'est juste une extension de MS est de la folie CRT situation. STL a modèle-ed structures dont la mise en page change en fonction de l'état de la _ITERATOR_DEBUG_LEVEL macro lorsque vous compilez votre code. Si vous incluez un STL-têtes puis votre code est codé en dur à l'état de _ITERATOR_DEBUG_LEVEL, et il ne PEUT tout simplement PAS interagir avec le code construit différemment. Il n'est pas question de debug/release, c'est à propos de différents struct dispositions intégrées dans le code compilé. De plus, le MS dbg/version C++ libs sont construits pour l'un ou l'autre etat.
En gros, si vous incluez toutes les STL-tête dans votre code, puis vous accepter un engagement à construire une suite de libs avec chaque structure de mise en page. Ce que vous POUVEZ faire, si vous ne voulez pas de navire debug/unoptimised code, est de faire 2 libération construit avec _ITERATOR_DEBUG_LEVEL défini manuellement pour chaque valeur, puis le nom du navire comme debug/release de façon appropriée. Même si elles sont toutes les deux vraiment "libération" s'appuie, la distinction est nécessaire pour faire correspondre STL structures de données pour le client reliant l'application.
TL;DR: il n'y a pas de "solution de contournement" autre que "ne comprend pas tout STL-têtes de n'importe où dans votre code"

OriginalL'auteur Manu Evans | 2014-02-23