CRT knihovny a knihovny MFC, které jsou propojeny v nesprávném pořadí v jazyce C++ dojde k chybě LNK2005

Překlady článku Překlady článku
ID článku: 148652 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Pokud knihovna Run-Time C (CRT) a Microsoft Foundation Knihovny třídy (MFC) jsou propojeny v nesprávném pořadí, můžete obdržet jednu z Následující LNK2005 chyby:
nafxcwd.lib(afxmem.obj): Chyba LNK2005:
"void * nový operátor __cdecl (nepodepsané int)" (??2@YAPAXI@Z) již
definované v LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj): Chyba LNK2005:
operátor void __cdecl" Delete(void *) "(??3@YAXPAX@Z) již definovány.
v LIBCMTD.lib(dbgnew.obj)
nafxcwd.lib(afxmem.obj): Chyba LNK2005:
"void * __cdecl operátor nové (char const int nepodepsané, int, *, int)"
(??2@YAPAXIHPBDH@Z) je již definováno v LIBCMTD.lib(dbgnew.obj)
mfcs40d.lib(dllmodul.obj): Chyba LNK2005: _DllMain@12, které jsou již definovány
MSVCRTD.LIB (dllmain.obj)
mfcs42d.lib(dllmodul.obj): Chyba LNK2005: _DllMain@12, které jsou již definovány
msvcrtd.lib(DllMain.obj)

Příčina

Použití knihovny CRT slabé externí propojení pro nový, odstranit, a DllMain funkce. Také obsahují knihovny MFC nový, odstranit, a DllMain funkce. Tyto funkce vyžadují knihovny MFC propojení před CRT knihovny spojen.

Řešení

Tento problém lze vyřešit dvěma způsoby. První řešení zahrnuje vynucení linker propojení knihovny ve správné pořadí. Druhé řešení umožňuje najít modul, který je příčinou problém a opravit.

Poznámka: Následující kroky jsou založeny na Visual C++ 6.0.

Roztok 1: Síla Linker do knihovny ve správném pořadí

  1. V Projektnabídky, klepněte na tlačítko Nastavení.
  2. V Nastavení zobrazeníNastavení projektu Dialogové okno, klepněte na tlačítko Vybrat projekt konfigurace, která je získání odkaz chyby.
  3. V Odkaz Klepnutím vyberte kartě Vstupv Kategorie pole se seznamem.
  4. V Ignorovat knihovny pole, vložte název knihovny (pro Příklad: Nafxcwd.lib;Libcmtd.lib).

    Poznámka: Propojovač příkazového řádku v odpovídající /NOD:<library name=""></library>.
  5. V Knihovna objektů/moduly pole Vložte názvy knihoven. Je-li nutné zajistit, že jsou uvedeny v pořadí a jako první dvě knihovny v řádku (například Nafxcwd.lib Libcmtd.lib).
Nastavení této možnosti v aplikaci Visual C++.NET, čtení "nastavení Visual Vlastnosti C++ projektu"téma nápovědy online.

Dvě řešení: Vyhledejte a opravte problém modulu

Chcete-li zobrazit aktuální pořadí propojení knihovny, postupujte takto:
  1. V Projektnabídky, klepněte na tlačítko Nastavení.
  2. V Nastavení zobrazeníNastavení projektu Dialogové okno, klepněte na tlačítko Vybrat projekt konfigurace, která je získání odkaz chyby.
  3. V Odkaz Karta typu/ verbose: lib v Možnosti projektupole.
  4. Znovu vytvořte projekt. Knihovny se zobrazí v během procesu propojování výstupní okno.

Prohlášení

To chování je záměrné.

Další informace

Používáte-li knihovny MFC, je třeba ověřit, zda dříve, než je spojen v knihovně CRT jsou propojeny. Provedete to tak, že Každý soubor v projektu nejprve zahrnovat Msdev\Mfc\Include\Afx.h buď přímo (# include <afx.h>) nebo nepřímo (# include <stdafx.h>). Afx.h zahrnout soubor sil správné pořadí knihovny, a to pomocí # pragma komentář (lib,"<libname>") směrnice. <b00></b00></libname></stdafx.h></afx.h>

Pokud zdrojový soubor má příponu příponami nebo soubor má cpp rozšíření je ale nemá používat MFC, můžete vytvořit a zahrnout soubor malé záhlaví (Forcelib.h) v horní části modulu. Toto nové záhlaví zajistíte, že pořadí hledání thelibrary je správná.

Visual C++ to neobsahuje soubor záhlaví. Chcete-li vytvořit tento soubor, postupujte takto:
  1. Otevřete Msdev\Mfc\Include\Afx.h.
  2. Vyberte řádky mezi #ifndef _AFX_NOFORCE_LIBS a #endif / /! _AFX_NOFORCE_LIBS.
  3. Kopírovat výběr do schránky systému Windows.
  4. Vytvořte nový textový soubor.
  5. Vložte obsah schránky do nového souboru.
  6. Uložte soubor jako Msdev\Mfc\Include\Forcelib.h.

Kroky pro reprodukci problému v aplikaci Visual C++.NET

  1. Spusťte aplikaci Visual Studio.NET.
  2. V Soubor příkazNovýa klepněte na tlačítko Projekt.
  3. Klepněte na tlačítko Projekty Visual C++ ve skupinovém rámečkuTypy projektůa klepněte na tlačítko Aplikace MFCve skupinovém rámečku Šablony.
  4. V Název typ textového poleQ148652.
  5. V Umístění typ textového poleC:\testa klepněte na tlačítko OK.
  6. V Průvodce aplikace MFC Dialogové okno Klepněte na tlačítko Typ aplikace.
  7. Klepněte na tlačítko Dialogovém okně ve skupinovém rámečkuTyp aplikacea klepněte na tlačítko Použít statické MFC Knihovna ve skupinovém rámečku Použití MFC.
  8. Klepněte na tlačítko Dokončit.
  9. V aplikaci Solution Explorer pod Zdrojové souboryVyberte všechny tři soubory cpp.
  10. Klepněte pravým tlačítkem myši na tři vybrané soubory a klepněte na tlačítkoOdebrat.
  11. Klepněte pravým tlačítkem myši Zdrojové soubory, přejděte na příkazPřidata klepněte na tlačítko Přidat novou položku.
  12. Klepněte na tlačítko Soubory v jazyce C++ ve skupinovém rámečkuŠablony. V Název typ textového poleAA. Klepněte na tlačítko Otevřít.
  13. Vložte následující kód do souboru Aa.cpp:
    int test(){new int; return 1;}
  14. Klepněte pravým tlačítkem myši Zdrojové soubory, přejděte na příkazPřidata klepněte na tlačítko Přidat existující položku.
  15. Vyberte následující soubory:
    • Q148652.cpp
    • Q148652Dlg.cpp
    • stdafx.cpp
  16. Klepněte na tlačítko Otevřít.
  17. Soubory, které jste vybrali v kroku 15 se podZdrojové soubory.
  18. Vyberte všechny čtyři soubory cpp pod Zdroj Soubory.
  19. Klepněte pravým tlačítkem myši čtyři cpp soubory, které jste vybrali, a potom Klepněte na tlačítko Vlastnosti.
  20. Rozbalit Vlastnosti konfiguracea pak Rozbalit C/C++.
  21. Klepněte na tlačítko Předkompilovaný záhlaví.
  22. Nastavit Vytvoření a použití kompilovaných záhlavíVlastnost Záhlaví pomocí předkompilována.. Klepněte na tlačítkoOK.
  23. V Sestavení nabídky, klepněte na tlačítko Znovu sestavit Řešení.

Vlastnosti

ID článku: 148652 - Poslední aktualizace: 23. dubna 2011 - Revize: 9.0
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbsweptvs2008 kbtshoot kbarttypeinf kberrmsg kbprb kbmt KB148652 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:148652

Dejte nám zpětnou vazbu

 

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