سؤال

أحاول تنفيذ تطبيق صغير لي من Win XP و VS 2005 للفوز 7 و VS 2010.

يقوم التطبيق بتجميع ويعمل بسلاسة في وضع التصحيح ، ولكن في وضع الإصدار أحصل على الخطأ التالي:

pcrecpp.lib(pcrecpp.obj) : error LNK2038: mismatch detected for 
'_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in LoginDlg.obj

أين يجب أن أبدأ في التحقق؟

هل كانت مفيدة؟

المحلول

يتم تجميع تطبيقك في وضع الإصدار ، لكنك تربط الإصدار المصحح من PCRE ، والذي كان /MTD (أو ما شابه) ، مما يسبب عدم التطابق في مستوى تصحيح الأخطاء في CRT.

إعادة ترجمة PCRE في وضع الإصدار لمطابقة التطبيق الخاص بك.

ال detect_mismatch براغما في VS 2010 هو ما يسبب هذا الخطأ في الانبعاث.

نرى http://blogs.msdn.com/b/vcblog/archive/2009/06/23/stl-performance.aspx (ابحث عن _iterator_debug_level)

نصائح أخرى

واجهت نفس الخطأ. في حالتي ، يكون الحل سهلًا: كان لدي مشروع واحد اعتمادًا على مشروع آخر.

ما عليك سوى إضافة _debug إلى المشروع A (Project-> Properties-> C ++-> Preprocessor-> تعريفات Preprocessor) وأنت تنتهي.

كانت مشكلتي أن المشروع التابع المستخدم "استخدم مجموعة الأحرف متعددة البايت"
تحت generl-> مجموعة الأحرف. بينما كان للمشروع الآخر قيمة "لا مجموعة"

يمكن أن يكون سبب هذا أيضًا تحديد تعريف المعالج المسبق _HAS_ITERATOR_DEBUGGING=0 في المشروع B وليس في A حيث ينتج A lib يستخدمه B.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top