VS2010 Несоответствие уровня отладки - PullRequest
1 голос
/ 17 декабря 2010

Во время тестирования моей библиотеки я заметил, что VS2010 выдаст ошибку, если я попытаюсь связать статическую библиотеку, созданную в режиме выпуска, когда проект находится в режиме отладки. И наоборот, кажется, что то же самоепроисходит, если я пытаюсь связать библиотеку, встроенную в Debug, с проектом, созданным в Release.

error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in Main.obj

Есть ли способ обойти это странное поведение?Должен ли я просто распространять две версии моей библиотеки?Кроме того, почему это происходит в первую очередь?

Ответы [ 2 ]

1 голос
/ 17 декабря 2010

Авторы библиотек не имеют больших возможностей указать, что смешивание и сопоставление не работают. Они должны вызывать ошибки компоновщика, всегда хитрые и запутанные. Что не работает здесь, так это то, что вы не можете смешивать библиотеку, которая использует классы STL, с включенной отладкой итератора и кодом, для которого она отключена. Довольно фундаментальное несоответствие, эти объекты класса шаблона не имеют одинаковый размер. Если вы действительно хотите это сделать, вам придется отключить диагностику, которую вы получаете с помощью функции.

Это требует построения отладочной версии вашего кода с помощью макроса _HAS_ITERATOR_DEBUGGING #defined в 0. Вы действительно хотите это сделать?

1 голос
/ 17 декабря 2010

Это не странное поведение, компилятор создает разные изображения в зависимости от определения макроса, оптимизации и других флагов.Лучше не распространять статические библиотеки, потому что пользователям придется иметь точно такую ​​же версию компилятора, стандартную версию библиотеки, те же флаги компилятора или вы рискуете несовместимостью: иногда вы получаете ошибки компоновки, иногда происходит сбой приложения, иногда оно ведет себя неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...