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.


Anmelden zum Antworten