Kürzlich bin ich bei der Arbeit an VC 6.0 an mehreren Stellen auf einen sehr ärgerlichen Fehler gestoßen. Der folgende Fehler tritt auf: Linking... nafxcwd.lib(afxmem.obj) : Fehler LNK2005: „void * __cdecl Operator new(unsigned int)“ (??2@YAPAXI@Z) bereits in LIBCMTD.lib( new definiert. obj) nafxcwd.lib(afxmem.obj): Fehler LNK2005: „void __cdecl Operator delete(void *)“ (??3@YAXPAX@Z) bereits in LIBCMTD.lib(dbgdel.obj) Debug/DCap definiert. Schwerwiegender Fehler LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden Lösung: Bei einem solchen Fehler ist es offensichtlich, dass beide verknüpften Bibliotheken Funktionen mit demselben Namen bereitstellen. Aber natürlich kann man LIBCMTD.lib nicht direkt ignorieren, da es sich um eine C-Bibliothek handelt. Der Grund für dieses Problem liegt darin, dass die MFC-Bibliothek mit der C-Bibliothek in Konflikt steht und die Reihenfolge ihrer Verknüpfung festgelegt werden muss, d. h. zuerst nafxcwd.lib und dann LIBCCMTD.lib. Bei beiden handelt es sich jedoch um Standardbibliotheken. Wie legt man also ihre Reihenfolge fest? Lösung: Ignorieren Sie sie zunächst und fügen Sie sie dann zusätzlich hinzu. Das heißt: Geben Sie auf der Registerkarte „Link“ unter „Bibliotheken ignorieren“ Folgendes ein: nafxcwd.lib libcmtd.lib und geben Sie dann auf derselben Registerkarte unter „Objekt-/Bibliotheksmodule“ Folgendes ein: nafxcwd.lib libcmtd.lib. Auf diese Weise wird die Reihenfolge, in der sie hinzugefügt werden, zu der Reihenfolge, die wir festlegen müssen. ?
Expandieren