Linker Fehler beim ausschalten des vorkompilierten Headers
-
Hallo Leute,
ich bekomme immer folgende Linker Fehler wenn ich den vorkompilierten Header ausschalte. Aber immer erst nachdem ich das Projekt geschlossen und neu geöffnet habe. (Wenn ich das Projekt neu anlege alle Datein wieder rein mache vorkompilierten Header ausschalte geht es bis ich das Projekt wieder schließe)
nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) ist bereits in LIBCMT.lib(new.obj) definiert.
1>nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) ist bereits in LIBCMT.lib(delete.obj) definiert.Dazu gibt es ja von Microsoft folgenden Link:
http://support.microsoft.com/kb/148652/deIn dem steht das man die Reihenfolge der Biblitehken von hand festlegen muß:
Klicken Sie im Menü Projekt auf Einstellungen.
Aktivieren Sie in der Ansicht Einstellungen für des Dialogfeldes Projekteinstellungen die Projektkonfiguration, bei der die Verknüpfungsfehler auftreten.
Aktivieren Sie auf der Registerkarte Link die Option Eingabe im Kombinationsfeld Kategorie.
Fügen Sie im Feld Bibliotheken ignorieren die Bibliotheksnamen hinzu (z. B. Nafxcwd.lib;Libcmtd.lib).Hinweis: Die Entsprechung in der Linker-Befehlszeile lautet "/NOD:<Bibliotheksname>".
Geben Sie im Feld Objekt-/Bibliotheksmodule die Bibliotheksnamen ein. Sie müssen sicherstellen, dass die Namen in der richtigen Reihenfolge und als die zwei ersten Bibliotheken in der Zeile angegeben sind (z. B. Nafxcwd.lib Libcmtd.lib).Bei schritt 5 ist doch gemeint diese bei zusätzliche Abhängigkeiten rein machen.
Dann kommen folgende linker Fehler:
1>Nafxcwd.lib(afxmem.obj) : error LNK2005: "public: static void * __stdcall CObject::operator new(unsigned int)" (??2CObject@@SGPAXI@Z) ist bereits in MeineDatei1.obj definiert.
1>Nafxcwd.lib(afxmem.obj) : error LNK2005: "public: static void __stdcall CObject::operator delete(void *)" (??3CObject@@SGXPAX@Z) ist bereits in MeineDatei2.obj definiert.
1>Nafxcwd.lib(winctrl2.obj) : error LNK2005: "public: __thiscall CStatusBarCtrl::CStatusBarCtrl(void)" (??0CStatusBarCtrl@@QAE@XZ) ist bereits in MeineDatei3obj definiert.Was kann ich da tun?
Was macht dieser Vorkompilierte Header genau? (Ich komme aus der Borland Welt) Und wie schalte ich ihn ornungsgemäß ab. Auch wenn ich ihn in Projekteigenachften ausschalte kommt beim enfernen der
#include "stdafx.h"ein Fehler:
fatal error C1189: #error : "\"stdafx.h\" vor dieser Datei für PCH einschließen
-
ich versuche mein Problem noch etwas genauer zu beschreiben:
Ich habe ein ganz normales MFC Projekt in dem ich 3 .cpp Dateien und 3 Header einbinde die ich nicht verändern kann. Das heißt dort auch keine include "stdafx" reinmachen kann.
Als ertes habe ich gedacht, da schalte ich einfach den Precomiled Header ab und es geht. Dann kommt obiger Fehler.
Das Problem schein zu sein das beide varianten von cpp Datein über include auf die Nafxcwd.lib Libcmtd.lib und stoßen und die Funktionen new und delete compilieren. Der Linker kann die dann nicht mehr auseinander halten.
Demnach müßte die Lösung oben doch eigenlich gehen. Ich versteh das nicht.
MfG