Pri CRT knižnice a MFC knižnice sú spojené v nesprávnom poradí v Visual C++ vyskytne chyba LNK2005

Preklady článku Preklady článku
ID článku: 148652 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

PRIZNAKY

Ak knižnica C Run-Time (CRT) a Microsoft nadácie Knižnice tried (MFC) sú spojené v nesprávnom poradí, môže sa zobraziť jedno z nasledujúce chyby LNK2005:
nafxcwd.lib(afxmem.obj): Chyba LNK2005:
"neplatné * __cdecl prevádzkovateľ nové (unsigned int)" (?2@YAPAXI@Z) už
definované v LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj): chyba LNK2005:
"prevádzkovateľ neplatné __cdecl delete(void *) "(?3@YAXPAX@Z) už definované
v LIBCMTD.lib(dbgnew.obj)
nafxcwd.lib(afxmem.obj): chyba LNK2005:
"neplatné * __cdecl prevádzkovateľ nové (unsigned int, int, znak-const *, int)"
(??2@YAPAXIHPBDH@Z) už definované LIBCMTD.lib(dbgnew.obj)
mfcs40d.lib(dllmodul.obj): chyba LNK2005: _DllMain@12 už definované
MSVCRTD.LIB (dllmain.obj)
mfcs42d.lib(dllmodul.obj): chyba LNK2005: _DllMain@12 už definované
msvcrtd.lib(dllmain.obj)

PRICINA

CRT knižnice používať slabé vonkajšie prepojenie pre nové, odstrániť, a DllMain funkcie. MFC knižnice obsahujú aj nové, odstrániť, a DllMain funkcie. Tieto funkcie vyžadujú MFC knižnice spojený pred CRT knižnica súvisí.

RIESENIE

Existujú dva spôsoby, ako vyriešiť tento problém. Prvý roztok zahŕňa vynútenie linker prepojiť knižníc na správne poradie. Druhé riešenie vám umožní nájsť modul, ktorý spôsobuje problém a opraviť.

Poznámka: Nasledovné kroky sú založené na Visual C++ 6.0.

Roztok jeden: Sila Linker do knižníc v správnom poradí

  1. Na Projectponuky, kliknite na tlačidlo Nastavenie.
  2. V Nastavenia pre pohľadNastavenia projektu dialógové okno, kliknutím vyberte projekt Konfigurácia, ktorá je dostať odkaz chyby.
  3. Na Prepojenie kartu, kliknutím vyberte možnosť Vstupv Kategória pole so zoznamom.
  4. V Ignorovať knižnice rámček, vložiť názvov knižnice (pre napríklad, Nafxcwd.lib;Libcmtd.lib).

    Poznámka: Linker príkazového riadka ekvivalent v /NOD:<library name=""></library>.
  5. V Knižnicu objektov moduly rámček, Vložte knižnicu názvoch. Musíte sa uistiť, že tieto sú uvedené v objednávku a ako prvé dve knižnice v riadku (napríklad, Nafxcwd.lib Libcmtd.lib).
Túto voľbu nastaviť v Visual C++.NET, prečítajte si „nastavenie vizuálnych Vlastnosti C++ projektu"online tému Pomocníka.

Roztok dve: Vyhľadajte a opraviť problém modul

Zobrazenie aktuálnej knižnica prepojenie objednávky, postupujte nasledovne:
  1. Na Projectponuky, kliknite na tlačidlo Nastavenie.
  2. V Nastavenia pre pohľadNastavenia projektu dialógové okno, kliknutím vyberte projekt Konfigurácia, ktorá je dostať odkaz chyby.
  3. Na Prepojenie na karte typ/ verbose: lib v Projekt možnostirámček.
  4. Prebudovať svoj projekt. Knižníc, bude uvedený v Výstupné okno počas proces prepojenia.

STAV

Toto správanie je zámerné.

DALSIE INFORMACIE

Keď použijete MFC knižnice, musíte uistiť že sú prepojené pred CRT knižnica je prepojený. Môžete to urobiť tak, že istí, že každý súbor v váš projekt zahŕňa Msdev\Mfc\Include\Afx.h prvé, buď priamo (# zahŕňajú <afx.h>) alebo nepriamo (# zahŕňajú <stdafx.h>). Afx.h zahŕňať súbor sily správne poradie knižnice pomocou komentár # pragma (lib,"<libname>") smernice. <b00></b00></libname></stdafx.h></afx.h>

Ak bol zdrojový súbor má príponu .c, alebo súbor má .cpp rozšírenie ale nechce používať MFC, môžete vytvoriť a zahŕňajú malý hlavička súboru (Forcelib.h) v hornej časti modulu. Toto nové záhlavie zabezpečuje že poradie hľadania thelibrary je správne.

Visual C++ neobsahuje to Hlavička súboru. Ak chcete vytvoriť tento súbor, postupujte nasledovne:
  1. Otvoriť Msdev\Mfc\Include\Afx.h.
  2. Vyberte riadky medzi #ifndef _AFX_NOFORCE_LIBS a #endif / /! _AFX_NOFORCE_LIBS.
  3. Kopírovať výber do Schránky systému Windows.
  4. Vytvoriť nový textový súbor.
  5. Prilepí obsah Schránky do tohto nového súboru.
  6. Uložte súbor ako Msdev\Mfc\Include\Forcelib.h.

Postup na zreprodukovanie problému v Visual C++.NET

  1. Spustiť Microsoft Visual Studio.NET.
  2. Na Súbor ponuku, ukážte naNové, a potom kliknite na tlačidlo Project.
  3. Kliknite na položku Visual C++ projektov podľaProjekt typy, a potom kliknite na tlačidlo MFC aplikáciapodľa Šablóny.
  4. V programu blok textu, typuQ148652.
  5. V Umiestnenie blok textu, typuC:\test, a potom kliknite na tlačidlo ok.
  6. V MFC aplikácia Sprievodca dialógové okno, kliknite na tlačidlo Typ aplikácie.
  7. Kliknite na položku Dialógové okno založené podľaTyp aplikácie, a potom kliknite na tlačidlo Použitie MFC v statický knižnica podľa Používanie MFC.
  8. Kliknite na položku Dokončiť.
  9. V programe Prieskumník roztoku podľa Zdrojové súboryVyberte všetky tri .cpp súbory.
  10. Kliknite pravým tlačidlom na tri vybraté súbory a potom kliknite naOdstránenie.
  11. Kliknite pravým tlačidlom myši Zdrojové súbory, ukážte naPridať, a potom kliknite na tlačidlo Doplniť nový bod.
  12. Kliknite na položku C ++ súbory podľaŠablóny. V programu blok textu, typuAA. Kliknite na položku Otvorené.
  13. Prilepte nasledujúci kód v súbore Aa.cpp:
    int test(){new int; return 1;}
  14. Kliknite pravým tlačidlom myši Zdrojové súbory, ukážte naPridať, a potom kliknite na tlačidlo Pridať existujúcu položku.
  15. Vyberte nasledujúce súbory:
    • Q148652.CPP
    • Q148652Dlg.CPP
    • stdafx.CPP
  16. Kliknite na položku Otvorené.
  17. Súbory, ktoré ste vybrali v kroku 15 sa objavujú v rámciZdrojové súbory.
  18. Vyberte všetky štyri súbory .cpp pod Zdroj Súbory.
  19. Kliknite pravým tlačidlom na štyroch .cpp súbory, ktoré ste vybrali, a potom kliknite na tlačidlo Vlastnosti.
  20. Rozbaľte Konfigurácia vlastnosti, a potom Rozbaľte C/C ++.
  21. Kliknite na položku Predkompilovaný hlavičky.
  22. Nastaviť Vytvorenie a používanie predkompilovaný hlavičkyVlastnosť Nie pomocou Precompiled hlavičky. Kliknite na položkuok.
  23. Na Vybudovať ponuky, kliknite na tlačidlo Znova zostaviť Roztok.

Vlastnosti

ID článku: 148652 - Posledná kontrola: 17. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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
Kľúčové slová: 
kbsweptvs2008 kbtshoot kbarttypeinf kberrmsg kbprb kbmt KB148652 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:148652

Odošlite odozvu

 

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