LNK2005 tõrge ilmneb, kui CRT-teegi ja MFC raamatukogud on seotud vales järjekorras Visual c ++

NB! Artikkel on tõlgitud Microsofti masintõlketarkvaraga ja seda saab parandada Kogukonnapõhise tõlkeraamistiku (CTF) tehnoloogiaga. Microsoft pakub masintõlgitud, kogukonna järeltöödeldud ja inimtõlgitud artikleid, et anda mitmekeelne juurdepääs kõigile meie teabebaasi artiklitele. Masintõlgitud ja järeltöödeldud artiklites võib olla sõnavara-, süntaksi- ja/või grammatikavigu. Microsoft ei vastuta mingite ebatäpsuste, tõrgete ega kahjude eest, mis on tulenenud sisu valest tõlkest või selle kasutamisest meie klientide poolt. Lisateavet CTF-i kohta leiate aadressilt http://support.microsoft.com/gp/machine-translation-corrections/et.

Artikli ingliskeelse versiooni kuvamiseks klõpsake siin: 148652
Sümptomid
Kui C käitusaja (CRT) teeki ja Microsofti Foundation Klassi (MFC) raamatukogud on seotud vales järjekorras, võidakse kuvada üks selle LNK2005 järgmised tõrked:
nafxcwd.lib(afxmem.obj): viga LNK2005:
"tühine * __cdecl ettevõtja uus (allkirjastamata int)" (??2@YAPAXI@Z) juba
määratletud LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj): viga LNK2005:
"tühine __cdecl operaator Delete(void *) "(??3@YAXPAX@Z) juba määratletud
aastal LIBCMTD.lib(dbgnew.obj)
nafxcwd.lib(afxmem.obj): viga LNK2005:
"tühine * __cdecl ettevõtja uus (allkirjastamata int, int, char konstant *, int)"
(??2@YAPAXIHPBDH@Z) juba määratletud LIBCMTD.lib(dbgnew.obj)
mfcs40d.lib(dllmodul.obj): viga LNK2005: Juba määratletud _DllMain@12
MSVCRTD.LIB (dllmain.obj)
mfcs42d.lib(dllmodul.obj): viga LNK2005: Juba määratletud _DllMain@12
msvcrtd.lib(dllmain.obj)
Põhjus
CRT-teeke kasutada nõrk Väline ülekanne on Uus, kustutadaja DllMain funktsioonid. MFC teegid sisaldada ka uue, kustutadaja DllMain funktsioonid. Need ülesanded nõuavad MFC raamatukogude siduda enne CRT on seotud Raamatukogu.

Lahendus
On kaks võimalust selle probleemi lahendamiseks. Esimene lahendus hõlmab sundides linker raamatukogud õige link järjekorras. Teine lahendus võimaldab teil leida moodul, mis põhjustab nende probleem ja parandage see.

Märkus Järgmised sammud põhinevad Visual C++ 6.0.

Üks lahendus: Sundida Linker Link raamatukogude õiges järjekorras

  1. Kohta ning Projektimenüü, klõpsake nuppu Seaded.
  2. Aastal ning Seaded silmas pidades onProjekti sätted dialoogiboksis nuppu, et valida projekti konfiguratsioon, mis on saada link vigu.
  3. Kohta ning Link Märkige jaotises Sisendaastal ning Kategooria liitboksi.
  4. Aastal ning Ignoreeri raamatukogud kasti, lisada dokumenditeegi nimed (jaoks Näiteks, Nafxcwd.lib;Libcmtd.lib).

    Märkus Linker käsurea samaväärne /NOD:<library name=""></library>.
  5. Aastal ning Objekti/Raamatukogu moodulid kast, Saate lisada dokumenditeegi nimed. Te peate veenduma, et need on loetletud järjekorras ja Kui kahe esimese rea (nt Nafxcwd.lib raamatukogud Libcmtd.lib).
Selle suvandi seadmiseks Visual C++ .NET-is Loe ka "sätte visuaalne C++ projekti atribuudid"võrguspikri teemal.

Kaks lahendust: Otsige ja parandage probleem moodul

Saate vaadata praeguse Raamatukogu linki tellimuse, toimige järgmiselt.
  1. Kohta ning Projektimenüü, klõpsake nuppu Seaded.
  2. Aastal ning Seaded silmas pidades onProjekti sätted dialoogiboksis nuppu, et valida projekti konfiguratsioon, mis on saada link vigu.
  3. Kohta ning Link jaotises tüüp/ verbose: lib aastal ning Projekti suvandidkasti.
  4. Taastada oma projekti. Raamatukogud on loetletud selle aknas väljund, sidudes protsessi käigus.
Olek
See käitumine on ette nähtud.
Lisateave
Kui kasutate MFC raamatukogud, tuleb teil veenduda, et need on seotud enne CRT-teegi on lingitud. Selleks teeb Veenduge, et hõlmab iga fail oma projekti Msdev\Mfc\Include\Afx.h kas otse (#include <Afx.h>) või kaudselt (#include <Stdafx.h>). On Afx.h hõlmab faili vägesid õiges järjekorras, et raamatukogud, kasutades #pragma kommentaar (lib,"<libname>") direktiiv. </libname></Stdafx.h></Afx.h>

Kui lähtefail on .c pikendamise või failil on mõne .cpp laiend aga ei kasuta MFC, võite luua ja kaasa väike päise faili (Forcelib.h) moodul ülaosas. See uus päis tagab, et thelibrary Otsi järjestus on õige.

Visual C ++ ei sisalda see päises faili. Selle faili loomiseks toimige järgmiselt.
  1. Avage Msdev\Mfc\Include\Afx.h.
  2. Valige read, vahel #ifndef _AFX_NOFORCE_LIBS ja #endif / /! _AFX_NOFORCE_LIBS.
  3. Valiku kopeerimiseks Windowsi lõikelauale.
  4. Loo uus tekstifaili.
  5. Kleepida lõikelaua sisu sellesse uude faili.
  6. Salvestage fail nimega Msdev\Mfc\Include\Forcelib.h.

Visual C++ .NET-is probleemi taasesilekutsumise juhised

  1. Käivitage Microsoft Visual Studio .net-i.
  2. Kohta ning Faili menüü käskUus, ja seejärel klõpsake nuppu Projekti.
  3. Klõpsake nuppu Visual C++ projektid aluselProjekti tüübid, ja seejärel klõpsake nuppu MFC taotlusalusel Mallid.
  4. Aastal ning Nimi Tippige tekst väljaleQ148652.
  5. Aastal ning Asukoht Tippige tekst väljaleC:\Test, ja seejärel klõpsake nuppu Ok.
  6. Aastal ning MFC Application Wizard dialoogiboksis Klõpsake nuppu Taotluse tüüp.
  7. Klõpsake nuppu Kδsitsi aluselTaotluse tüüp, ja seejärel klõpsake nuppu Staatiline MFC kasutusel Raamatukogu alusel MFC kasutamine.
  8. Klõpsake nuppu Viimistlus.
  9. Aknas lahenduste Explorer, all Allikas faileVali kõik kolm .cpp failid.
  10. Paremklõpsake kolme valitud failid ja siis klõpsakeEemalda.
  11. Paremklõpsake Allikas faile, osutage käsuleLisada, ja seejärel klõpsake nuppu Lisa uus üksus.
  12. Klõpsake nuppu C++ failid aluselMallid. Aastal ning Nimi Tippige tekst väljaleAa. Klõpsake nuppu Avatud.
  13. Kleepige järgnev kood Aa.cpp faili:
    int test(){new int; return 1;}
  14. Paremklõpsake Allikas faile, osutage käsuleLisada, ja seejärel klõpsake nuppu Lisada olemasoleva üksuse.
  15. Vali järgmised failid:
    • Q148652.CPP
    • Q148652Dlg.CPP
    • stdafx.CPP
  16. Klõpsake nuppu Avatud.
  17. Juhises 15 valitud failid kuvatakse jaotisesAllikas faile.
  18. Vali kõik neli .cpp failid alla Allikas Failid.
  19. Neli .cpp failid, mida olete valinud, paremklõpsake ja seejärel Klõpsake nuppu Atribuudid.
  20. Laienda Konfiguratsiooni atribuudid, ja siis Laienda C/C ++.
  21. Klõpsake nuppu Precompiled päised.
  22. Seatud on Precompiled päise loomiseks või kasutamiseksvara Ei kasuta Precompiled päised. Klõpsake nuppuOk.
  23. Kohta ning Ehitada menüü, klõpsake nuppu Taastada Lahendus.
nafxcwd

Hoiatus. See artikkel on masintõlgitud.

Atribuudid

Artikli ID: 148652 – viimati läbi vaadatud: 06/07/2013 00:10:00 – redaktsioon: 1.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 KbMtet
Tagasiside