أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

يحدث خطأ LNK2005 عند ربط مكتبة CRT ومكتبات MFC في الترتيب غير صحيح في Visual c + +

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

اضغط هنا لرابط المقالة باللغة الانجليزية148652
الأعراض
عند ربط مكتبة وقت التشغيل C (CRT) ومكتبات Microsoft Foundation فئة (MFC) في الترتيب غير صحيح، قد تتلقى إحدى LNK2005 الأخطاء التالية:
nafxcwd.lib(afxmem.obj): خطأ LNK2005:
"void * __cdecl عامل جديد (int غير الموقعة)" (؟2@YAPAXI@Z) مسبقاً
المعرفة في LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj): خطأ LNK2005:
"إلغاء __cdecl عامل delete(void *)" (؟3@YAXPAX@Z) معرفة مسبقاً
في LIBCMTD.lib(dbgnew.obj)
nafxcwd.lib(afxmem.obj): خطأ LNK2005:
"void * __cdecl عامل جديد (int غير الموقعة، int char const *، int)"
(??2@YAPAXIHPBDH@Z) المعرفة مسبقاً في LIBCMTD.lib(dbgnew.obj)
mfcs40d.lib(dllmodul.obj): خطأ LNK2005: تم تعريفها مسبقاً في _DllMain@12
مسفكرتد.LIB (dllmain.obj)
mfcs42d.lib(dllmodul.obj): خطأ LNK2005: تم تعريفها مسبقاً في _DllMain@12
msvcrtd.lib(dllmain.obj)
السبب
استخدام مكتبات CRT ضعف الارتباط الخارجي جديدةو حذف، ودالات DllMain . أيضا تحتوي على مكتبات MFC جديدوحذفودالات DllMain . تتطلب هذه الدالات مكتبات MFC ربط قبل أن يتم ربط مكتبة CRT.

الحل
هناك طريقتان لحل هذه المشكلة. الحل الأول ينطوي على فرض الرابط لربط المكتبات بالترتيب الصحيح. الحل الثاني يسمح لك العثور على الوحدة النمطية التي تسبب المشكلة وتصحيحها.

ملاحظة تستند الخطوات التالية في Visual c + + 6.0.

حل واحد: رابط إلى مكتبات الارتباط في الترتيب الصحيح فرض

  1. من القائمة ' مشروع'، انقر فوق إعدادات.
  2. في الإعدادات عرض مربع الحوارإعدادات المشروع ، انقر لتحديد بروجيكتكونفيجوريشن هو الحصول على أخطاء الارتباط.
  3. في علامة التبويب " ارتباط "، انقر فوق لتحديد الإدخالفي مربع التحرير والسرد الفئة .
  4. في مربع إيجنوريليبراريس ، إدراج أسماء مكتبة (فوريكسامبلي، Nafxcwd.lib؛Libcmtd.lib).

    ملاحظة المكافئ سطر الأوامر الرابط في/NOD:<library name=""></library>.
  5. في المربع الوحدات النمطية/مكتبة كائنات ، إدراج أسماء مكتبة. يجب أن تتأكد من أن هذه مسرودة في مكتبات اثنين واوجينيو الأول الأمر في السطر (على سبيل المثال، Nafxcwd.libLibcmtd.lib).
لتعيين هذا الخيار في Visual c + +.NET، قراءة موضوع التعليمات عبر الإنترنت "إعداد Visual c + + المشروع خصائص".

الحل الثاني: تحديد وتصحيح المشكلة الوحدة النمطية

لعرض ترتيب ارتباط المكتبة الحالية، اتبع الخطوات التالية:
  1. من القائمة ' مشروع'، انقر فوق إعدادات.
  2. في "لإعدادات" عرض مربع الحوارإعدادات المشروع ، انقر فوق لتحديد بروجيكتكونفيجوريشن هو الحصول على أخطاء الارتباط.
  3. في علامة التبويب " ارتباط "، اكتب/المطول: lib في مربع الحوار خيارات المشروع.
  4. أعد إنشاء المشروع. سيتم سرد المكتبات في إطار ثيوتبوت أثناء عملية الارتباط.
تصريح
يعتبر هذا السلوك حسب التصميم.
معلومات أخرى
عند استخدام مكتبات MFC، يجب التأكد من ربط قبل أن يتم ربط مكتبة CRT. يمكنك القيام بذلك عن طريق التأكد من أن كل ملف في المشروع الخاص بك يتضمن Msdev\Mfc\Include\Afx.h أولاً، أما مباشرة (#include <Afx.h>) أو غير مباشر (#include <Stdafx.h>). Afx.h تضمين ملف القوات الترتيب الصحيح للمكتبات، باستخدام التعليق #pragma (lib، "<libname>") التوجيه.<b00> </b00> </libname> </Stdafx.h> </Afx.h>

إذا كان الملف المصدر يحتوي على ملحق.c أو الملف بملحق.cpp لكن لا يستخدم MFC، يمكنك إنشاء وتضمين ملف رأس صغيرة (Forcelib.h) في الجزء العلوي من الوحدة النمطية. رأس الصفحة الجديد يجعل من صحة ترتيب البحث ثيليبراري.

Visual c + + لا يحتوي ملف الرأس هذا. لإنشاء هذا الملف، اتبع الخطوات التالية:
  1. افتح Msdev\Mfc\Include\Afx.h.
  2. حدد أسطر بين #endif و #ifndef _AFX_NOFORCE_LIBS//! _AFX_NOFORCE_LIBS.
  3. نسخ التحديد إلى حافظة Windows.
  4. قم بإنشاء ملف نصي جديد.
  5. لصق محتويات الحافظة في هذا الملف الجديد.
  6. حفظ الملف باسم Msdev\Mfc\Include\Forcelib.h.

خطوات إعادة إنشاء المشكلة في Visual c + +.NET

  1. بدء تشغيل Microsoft Visual Studio.NET.
  2. من القائمة ملف ، أشر إلىجديد، ومن ثم انقر فوق المشروع.
  3. انقر فوق مشاريع Visual c + + ضمنأنواع المشاريع، ومن ثم انقر فوق تطبيق MFCضمن قوالب.
  4. في مربع النص الاسم ، اكتبQ148652.
  5. في مربع النص الموقع ، اكتبC:\Test، ثم انقر فوق موافق.
  6. في مربع الحوار معالج تطبيق MFC ، انقر فوق نوع التطبيق.
  7. انقر فوق القائمة على الحوار ضمننوع التطبيقومن ثم انقر فوق استخدام MFC في ستاتيكليبراري ضمن استخدام MFC.
  8. انقر فوق إنهاء.
  9. في "مستكشف الحلول"، حدد ضمن ملفات مصدرملفات.cpp الثلاثة.
  10. زر الماوس الأيمن فوق الملفات المحددة الثلاثة، ومن ثم انقر فوقإزالة.
  11. زر الماوس الأيمن فوق الملفات المصدروأشر إلىإضافةثم انقر فوق "إضافة عنصر جديد".
  12. انقر فوق ملفات c + + ضمنقوالب. في مربع النص الاسم ، اكتبAa. انقر فوق فتح.
  13. قم بلصق التعليمة البرمجية التالية في ملف Aa.cpp:
    int test(){new int; return 1;}
  14. زر الماوس الأيمن فوق الملفات المصدروأشر إلىإضافةثم انقر فوق إضافة عنصر موجود.
  15. حدد الملفات التالية:
    • Q148652.cpp
    • Q148652Dlg.cpp
    • stdafx.cpp
  16. انقر فوق فتح.
  17. تظهر الملفات التي قمت بتحديدها في الخطوة 15 ضمنملفات المصدر.
  18. حدد كافة ملفات.cpp أربعة تحت SourceFiles.
  19. انقر بالزر الأيمن أربعة ملفات.cpp الذي قمت بتحديده و خصائصثينكليك.
  20. قم بتوسيع تكوين خصائصوثينيكسباند C/c + +.
  21. انقر فوق رؤوس المترجمة برمجياً مسبقاً.
  22. تعيين الخاصية إنشاء/استخدام ما قبل التحويل البرمجي على رأسإلى عدم استخدام ملفات الرأس المترجمة برمجياً. انقر فوقموافق.
  23. في بنية القائمة، انقر فوق ريبويلدسولوشن.
نافكسكود

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 148652 - آخر مراجعة: 04/02/2014 05:34:00 - المراجعة: 9.0

Microsoft Visual C++ 2008 Express Edition, Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Visual C++ .NET 2002 Standard Edition, Microsoft Visual C++ .NET 2003 Standard Edition

  • kbsweptvs2008 kbtshoot kbarttypeinf kberrmsg kbprb kbmt KB148652 KbMtar
تعليقات
html>