Linkerfehler error LNK2019: unresolved external symbol __CrtDbgReportW ...
-
Hallo,
habe ein größeres, älteres Projekt. Sobald ich in diesem Projekt irgendwelche STL-Libraries verwenden möchte, kriege ich folgenden Linkerfehler:
Linking...
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
libcpmtd.lib(stdthrow.obj) : error LNK2019: unresolved external symbol __CrtDbgReportW referenced in function "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z)
libcpmtd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __malloc_dbg referenced in function "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)
libcpmtd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __free_dbg referenced in function "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z)Diesen Fehler kriege ich auch nur, wenn ich eine Release-Version erzeugen möchte. Mit der Debug-Version gibt es keine Probleme.
Woran kann das liegen?Danke!
-
Da werden scheinbar die Bibliotheken in der Debug-Version anders gelinkt als in der Release-Version. Schau mal in die Projekteigenschaften und stell die Release-Version so ein, wie die Debug-Version.
-
Der einzige Unterschied zwischen Debug und Release ist die Runtime library.
Bei Debug wird die Multi-threaded Debug (/MTd) und bei Release die Multi-threaded (/MT) benutzt.
Die Release Version kann zwar mit der /MTd problemlos erzeugt werden, ist dann aber auf anderen Rechnern nicht ausführbar.
-
Versuch mal mit diesen Linkereinstellungen zu kompilieren:
#pragma comment( linker, "/NODEFAULTLIB:libcmt.lib" ) #pragma comment( linker, "/NODEFAULTLIB:libcpmtd.lib" )
Alternativ kannst du auch noch versuchen in den Linkereinstellugen (Properties->Linker->Command Line->Additional options) folgendes zu setzen:
/FORCE:MULTIPLE
-
Hallo asdfajds,
der Eintrag in den Additional options bewirkt gar nichts und durch den pragma Eintrag erhalte ich noch mehr Fehler.
-
Hallo!
Ich habe die Lösung für dieses Problem gefunden! Das Projekt habe ich von einem anderen Entwickler übernommen und bei seinen Einstellungen war für die Release Version bei den Preprocessor Definitions "_DEBUG" definiert. Nach dem Entfernen tritt dieser Fehler nicht mehr auf.