Linker Probleme

MedRamBO

Mitglied
Hi Leute,

ich probiere im Moment meine Runtime Library zu /MT (statisch) umzustellen um die kompabilität mit einem meiner Programme sicher zu stellen. Meine bisherigen versuche ergaben immer das selbe Problem welche unten aufgelistet sind.
Habt ihr irgentwelche Ideen die mir hierbei weiterhelfen könnten? Hab schon gegoogelt
und dabei bin ich auf Antworten wie: "Die Header Dateien dürfen hierbei nich gemixt als Release und Debug Version eingefügt werden. Das lässt sich in den Projekteinstellungen ganz einfach umstellen.", aber damit komme ich nicht klar. Ich hoffe auf ein wenig Hilfe eurerseits,

danke im vorraus. Jede Antwort ist erwünscht :rolleyes:

Code:
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj)
MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (0type_info@@AAE@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
C:\Dokumente und Einstellungen\RamBO\Desktop\Kopie von RisinG_DestructioN_Scan_ES\Release\RisinG_DestructioN.dll : fatal error LNK1169: one or more multiply defined symbols found
 
Entschuldigung für meine 2. Post. Hat niemand eine Idee? :( Ich komm einfach nicht weiter an dieser Stelle. Ich habe mal LIBCMT.lib ignoriert, aber dann bekomme ich Runtime Error beim benutzen. (Compelieren und Buld t)
 
Moin,

also ich hatte hier vor geraumer Zeit hier mit meinen Anwendungen ähnliche Probleme!

Der Linkerfehler LNK4098 besagt. dass die Standardbibliothek "xxx" in Konflikt mit anderen Libs steht und man gerade versucht hat, mit nicht kompatiblen Libs zu binden!
Die nicht kompatiblen Bibliotheken müssen dann mit "/NODEFAULT:Lib" ignoriert werden.

Ich kopiere Dir hier mal die Übersicht aus meiner Hilfe (VC++ 6.0) rein, die mich damals bei meinen Problemen auf die richtige Spur gebracht hat :)

Code:
Standardbibliothek "Bibliothek" steht in Konflikt mit anderen Bibliotheken; /NODEFAULT:Bibliothek verwenden

Sie versuchen, mit nicht kompatiblen Bibliotheken zu binden.

Wichtig   Die Laufzeitbibliotheken enthalten jetzt Direktiven, um das 
Vermischen von verschiedenen Typen zu verhindern. Sie werden 
diese Warnung bei dem Versuch erhalten, verschiedene Typen oder 
Debug- und Nicht-Debug-Versionen der Laufzeitbibliothek im gleichen 
Programm zu verwenden. Wenn Sie z. B. eine Datei zur Verwendung 
einer Art Laufzeitbibliothek und eine andere Datei zur Verwendung 
einer anderen Art Bibliothek (z. B. single-threaded im Vergleich zu 
multithreaded) kompiliert haben und Sie anschließend versuchen, 
diese zu binden, werden Sie diese Warnung erhalten. Sie sollten alle 
Quelldateien kompilieren, um die gleiche Laufzeitbibliothek zu verwenden. 
Weitere Informationen finden Sie unter den Compiler-Optionen 
Verwenden der Laufzeitbibliothek (MD, /ML, /MT, /LD). 

Sie können den Schalter /VERBOSE:LIB des Linkers dazu verwenden, 
die vom Linker gesuchten Bibliotheken zu bestimmen. Wenn Sie 
einen LNK4098 erhalten, und Sie eine ausführbare Datei erstellen 
möchten, die z. B. die single-threaded Nicht-Debug- Laufzeitbibliotheken 
einsetzt, verwenden Sie die Option /VERBOSE:LIB, um zu ermitteln, 
nach welchen Bibliotheken der Linker sucht. Der Linker sollte LIBC.LIB 
und nicht LIBCMT.LIB, MSVCRT.LIB, LIBCD.LIB, LIBCMTD.LIB oder 
MSVCRTD.LIB als zu suchende Bibliotheken ausgeben. Sie können 
den Linker anweisen, die inkorrekten Laufzeitbibliotheken zu ignorieren, 
indem Sie die inkorrekten Bibliotheken in das Textfeld Bibliotheken 
ignorieren in der Registerkarte Linker des Dialogfelds Einstellungen 
im Developer Studio eingeben, oder durch Verwendung der Option 
/NODEFAULTLIB:Bibliothek mit LINK für jede Bibliothek, die Sie 
ignorieren möchten. Weitere Informationen finden Sie unter der 
Linker-Option Ignorieren von Bibliotheken (/NODEFAULTLIB).

Die unten aufgeführte Tabelle zeigt, welche Bibliotheken abhängig 
von der von Ihnen verwendeten Laufzeitbibliothek ignoriert werden sollten.

Beim Verwenden dieser Laufzeitbibliothek Ignorieren Sie diese Bibliotheken 
Single-threaded (libc.lib) libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib 
Multithreaded (libcmt.lib) libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib 
Multithreaded bei Verwendung von DLL (msvcrt.lib) libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib 
Single-Threaded Debug (libcd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib 
Multithreaded Debug (libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib 
Multithreaded Debug bei Verwendung von DLL (msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib 


Wenn Sie z. B. diese Warnung erhalten und Sie eine ausführbare Datei 
erstellen möchten, welche die Single-threaded-Version (Nicht-Debug) 
der Laufzeitbibliotheken verwendet, könnten Sie die folgenden Optionen 
für den Linker verwenden:

/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib

Ich hoffe, dass Dir das auch weiterhilft!!

tschüss
Klaus

ERGÄNZUNG:
diese Libs habe ich über die Projekteinstellungen ignoriert:
Libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
 
Zuletzt bearbeitet:
Guten morgen,

super :)

Noch ein kleiner Tipp hierzu:
Der Text kommt aus der Hilfe des Visual Studios! Du erreichst ihn ganz einfach wie jedes andere Schlüsselwort auch;
also: in der Konsole innerhalb der Meldung einfach den entsprechenden Teil markieren (hier also "LNK4098") und dann <F1> drücken!

tschüss
Klaus
 
Zurück