[C++] LNK 2005 bei Umstellung VS6 --> VS2010

vfl_freak

Premium-User
Hallo zusammen,

ich bin seit gestern stolzer Besitzer des VS 2010 Prof. :p und versuche nun seit heute morgen, eines meiner Programme ans laufen zu bekommen. Nachdem ich die üblichen Compilerfehler allesamt beseitigt habe, bleibe ich nun am genannten Linkerfehler LNK2005 hängen.

C++:
1>      Durchsuchen von C:\Programme\Microsoft Visual Studio 10.0\VC\lib\LIBCMT.lib:
...
1>      Durchsuchen von C:\Programme\Microsoft Visual Studio 10.0\VC\atlmfc\lib\nafxcw.lib:
1>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.
1>nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (****_U@YAPAXI@Z) ist bereits in LIBCMT.lib(new2.obj) definiert.
1>nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (****_V@YAXPAX@Z) ist bereits in LIBCMT.lib(delete2.obj) definiert.

Mittlerweile habe ich einige Dutzend Webseiten ohne wirklichen Erfolg durchforstet.
Es liegt allerdings inzwischen der Verdacht nahe, dass die Reihenfolge, in der diese Dateien durchsucht werden, wohl nicht unerheblich sein könnte (vgl. http://msdn.microsoft.com/query/dev...EF1&l=DE-DE&k=k(LNK2005);k(VS.OUTPUT)&rd=true)

Ein Kollege arbeitet schon einige Wochen länger mit dem VS2010 und hat die Probleme nicht. Spannenderweise werden bei ihm die beiden Libs in umgekehrter Reihenfolge durchsucht. Wir haben mittlerweile Stück für Stück die Einträge in der Eigenschaftsseite verglichen und auch dort keine (relevanten) Unterschiede feststellen können.

(a) Wie kann erreichen, dass zuerst "nafxcw.lib" und danach "libcmt.lib" durchsucht wird?
(b) Hat irgendwer noch einen anderen Tipp für mich ?

Danke und Gruß
Klaus

EDIT:
Ich vergaß zu erwähnen, dass dieses Problem NUR beim Erstellen der Releaseversion auftritt. Die Debugversion läßt sich erstellen !
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Du mußt alle deine Bibliotheken und Programme mit der gleichen Laufzeitbibliothek übersetzen.

Es gibt 4 für C und 4 für C++:

- Debug DLL
- DLL
- Debug Statisch
- Statisch

Schau in die Projekteinstellungen unter C/C++ Code Generierung -> Laufzeitbibliothek

Gruß
 
Zuletzt bearbeitet:
Hallo deepthroat,

erstmal Danke für die schnelle Antwort :)

Ich verwende in beiden Fällen die statische Variante, also /MT resp. /MTd.

Bin jetzt aber gerade beim erneuten lesen (hier: http://support.microsoft.com/kb/148652/en-us) zufällig über die Lösung gestolpert.
Es ist wohl wirklich entscheidend, die MFC-Libs vor den CRT's zu linken und für die beiden o. g. Libs erreicht man das, indem in den Projekteigenschaften und "Linker/Eingabe" beide ignoriert (dritte Zeile) und dann in der ersten Zeile bei "zusätzliche Abhängigkeiten" in der richtigen Reihenfolge einträgt .....

Nun ja, compilieren kann ist jetzt - nur noch nicht laufen lassen, da sofort ein Runtime-Error auftritt ... dann werde ich mich mal zuerst mit dem Debugger beschäftigen müssen :-(

Ein Sch... ist das :suspekt:

Nochmals Danke und Gruß
Klaus
 
Zuletzt bearbeitet:
Zurück