Linker Error LNK2038: عدم التطابق المكتشف في وضع الإصدار
-
27-09-2019 - |
سؤال
أحاول تنفيذ تطبيق صغير لي من 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.