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

Artiklite tõlked Artiklite tõlked
Artikli ID: 148652 - Vaadake tooteid, millega see artikkel seostub.
Laienda kõik | Ahenda kõik

Sellel veebilehel

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.

Atribuudid

Artikli ID: 148652 - Viimati läbi vaadatud: 7. juuni 2013 - Redaktsioon: 1.0
Kehtib järgmise lõigu kohta:
  • 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
Märksõnad: 
kbsweptvs2008 kbtshoot kbarttypeinf kberrmsg kbprb kbmt KB148652 KbMtet
Masintõlgitud
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

Andke tagasisidet

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com