سؤال

بعد مرور عملية طويلة لإعادة تسمية المشروع ، لن يبني مشروع DLL في وضع التصحيح (إصدار أعمال الإصدار):

MSVCRTD.lib(msvcr90d.dll) : error LNK2005: _CrtDbgReportW already defined in LIBCMTD.lib(dbgrpt.obj)

يتم تعيين هذا المشروع ، والمكتبات الثابتة الخمسة التي يعتمد عليها ، لاستخدام "Debug Multi-Thergended (/MTD)" (تحت C/C ++ | Code Generation | مكتبة وقت التشغيل). أعتقد أن libcmtd.lib هو واحد لتصحيح الأخطاء متعددة الخيوط ، ولكن ما هو msvcrtd.lib ، وما الذي يمكن أن يسبب هذا الخطأ؟

إذا أحدث فرقًا ، فإن DLL هذا مخصص لـ Windows CE.

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

المحلول

libcmt هو ما تحتاجه /mT ، MSVCRT هو ما تحتاجه /md. أنت تربط ملفات .OBJ و .lib التي تم خلطها ، بعضها تم تجميعه باستخدام /MT مع /MD. هذا ليس جيدا.

عادة ما تكون ملفات .lib التي تسبب المشكلة. راجع إعدادات البناء الخاصة بهم وتأكد من أن خيار /M هو نفسه مشروع DLL الخاص بك.

أيضًا ، احذر من المشكلة التي يمكنك الوصول إليها إذا تم تجميع DLL باستخدام /MT. سيكون لديك مشاكل كبيرة عندما يعيد DLL مؤشرات إلى كائنات يحتاج العميل إلى إصدارها. لا يمكن ، لا يستخدم نفس تخصيص الذاكرة.

نصائح أخرى

مقالة MSDN على LNK4098 يحتوي على جدول مفيد للغاية: إنه يخبرك بالمكتبات التي تضيفها يدويًا إلى قائمة "تجاهل مكتبة محددة" ، اعتمادًا على CRT التي تستخدمها. في حالتك ، يجب أن تتجاهل كل هذه:

libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

لاحظ أن المكتبة المبلغ عنها موجودة في هذه القائمة أيضًا. تم وصف المشكلة بمزيد من التفصيل في KB154753 ... المكتبات التي يرتبط بها البرنامج عند بناءها باستخدام Visual C ++

إن تفسيري لهذا هو أنه في مواقف معينة ، ستختار الخوارزمية التي تختار تلقائيًا المكتبات CRT لربط الكود الخاص بك مع العديد من المكتبات المتضاربة.

ما هي مجموعة الإصدار أيضا؟ يمكن أن يسبب تعيين DLL على تصحيح الأخطاء المتعددة مؤشرات الترابط مشكلات إذا قمت بتخصيص ذاكرة أن شيئًا يتصاعد DLL يحاول التحرر (سيتم تخصيصها في أكوام مختلفة ، على سبيل المثال). حاول تعيين DLL متعدد الخيوط.

من المحتمل أن تنشأ مشكلة الرابط لأن المكتبة التي تربطها تتوقع DLL Multimded Debr ، لذا يحاول الرابط ربط الرابط الخاص بك وفشل الرابط الخاص بك ...

المشكلة هي أن msvcr90d.dll ليس في صورة Windows CE. يجب نشره مع التطبيق. يقع msvcr90d.dll في $ (vcinstalldir)/ce/bin/$ (archfam).

http://stackoverflow.com/questions/15959877/windows-ce-6-0-and-runtime-link-to-debug-dll-mdd

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