Linkerror mit SFML



  • frohe weihnachten zusammen,

    ich hab folgendes problem:
    ich benutze für mien aktuelles projekt die sfml bibliothek. jetzt hab ich mir eine weitere klasse hinzugefügt, dran rumgetüftelt und so weiter, wollte das ganze compilen und testen, und plötzlich springt mir der linker an den hals

    1>libcmt.lib(_trnsctrl_.obj) : error LNK2005: ___CxxFrameHandler3 ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(_fpinit_.obj) : error LNK2005: __fltused ist bereits in a previous module definiert.
    1>libcmt.lib(_fpinit_.obj) : error LNK2005: __ldused ist bereits in a previous module definiert.
    1>libcmt.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(invarg.obj) : error LNK2005: __invoke_watson ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(invarg.obj) : error LNK2005: __invalid_parameter ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(crt0dat.obj) : error LNK2005: __initterm_e ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(crt0dat.obj) : error LNK2005: _exit ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(crt0dat.obj) : error LNK2005: __exit ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(crt0dat.obj) : error LNK2005: __cexit ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(crt0dat.obj) : error LNK2005: __amsg_exit ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(crt0.obj) : error LNK2005: _mainCRTStartup ist bereits in MSVCRTD.lib(crtexe.obj) definiert.
    1>libcmt.lib(errmode.obj) : error LNK2005: ___set_app_type ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(typinfo.obj) : error LNK2005: "public: void __thiscall type_info::_type_info_dtor_internal_method(void)" (?_type_info_dtor_internal_method@type_info@@QAEXXZ) ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(typinfo.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) ist bereits in MSVCRTD.lib(ti_inst.obj) definiert.
    1>libcmt.lib(typinfo.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) ist bereits in MSVCRTD.lib(ti_inst.obj) definiert.
    1>libcmt.lib(mlock.obj) : error LNK2005: __unlock ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(mlock.obj) : error LNK2005: __lock ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(winxfltr.obj) : error LNK2005: __XcptFilter ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(setlocal.obj) : error LNK2005: __configthreadlocale ist bereits in MSVCRTD.lib(MSVCR100D.dll) definiert.
    1>libcmt.lib(crt0init.obj) : error LNK2005: ___xi_a ist bereits in MSVCRTD.lib(cinitexe.obj) definiert.
    1>libcmt.lib(crt0init.obj) : error LNK2005: ___xi_z ist bereits in MSVCRTD.lib(cinitexe.obj) definiert.
    1>libcmt.lib(crt0init.obj) : error LNK2005: ___xc_a ist bereits in MSVCRTD.lib(cinitexe.obj) definiert.
    1>libcmt.lib(crt0init.obj) : error LNK2005: ___xc_z ist bereits in MSVCRTD.lib(cinitexe.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _memchr ist bereits in libcmt.lib(memchr.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _longjmp ist bereits in libcmt.lib(longjmp.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _fclose ist bereits in libcmt.lib(fclose.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _fopen ist bereits in libcmt.lib(fopen.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _fflush ist bereits in libcmt.lib(fflush.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: ___iob_func ist bereits in libcmt.lib(_file.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _sprintf ist bereits in libcmt.lib(sprintf.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _abort ist bereits in libcmt.lib(abort.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strncpy ist bereits in libcmt.lib(strncpy.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _malloc ist bereits in libcmt.lib(malloc.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _fseek ist bereits in libcmt.lib(fseek.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _ftell ist bereits in libcmt.lib(ftell.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _realloc ist bereits in libcmt.lib(realloc.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _fread ist bereits in libcmt.lib(fread.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strtol ist bereits in libcmt.lib(strtol.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strncmp ist bereits in libcmt.lib(strncmp.obj) definiert.
    1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _ldexp ist bereits in libcmt.lib(_ldexp_.obj) definiert.
    1>LINK : warning LNK4098: Standardbibliothek "MSVCRTD" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
    1>MSVCRTD.lib(cinitexe.obj) : warning LNK4098: Standardbibliothek "libcmt.lib" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
    1>************************************PFAD_ZU_MEINER_EXE*****************.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
    

    google meinte, das liegt daran, dass ich mit /MD rumgespielt habe, also das statische und das dynamische linken geändert habe, aber es klappt mit beiden einstellungen nicht

    die sfml dynamisch dazulinken produziert andere fehler, aber das statische linken sollte eigentlich klappen, da es von jetzt auf gleich nicht mehr ging.
    das problem ist: ich kann nichtmal sagen, bei welchen änderungen es fehlschlug...
    ich hab "nur" eine neue klasse (header und cpp datei) erstellt, geschrieben und in mein projekt includet und schon klappte nur noch das compilen.
    und in dieser header datei sind nur string und 2 sfml header includet...

    habt ihr noch irgendeine idee?
    die vogeschlagenen optionen wie /FORCE oder /NODEFAULTLIB funktionieren auch nur bedingt, da debuggen versagt...



  • Ich würde da nicht zu lange herumprobieren, sondern ein neues Projekt erstellen. Ab und zu reicht es auch schon, alles neu zu kompilieren...



  • ok, hätte ich dazu sagen sollen: hab ich gemacht, erst vs2010 mal neu gestartet, dann neues projekt und alles rein kopiert, aber hat keine verbesserung gebracht
    ok, das ist alles nicht gross, aber trotzdem

    wenn ich jedoch alle inkludes von sfml wegmache, klappts, aber dann muss ich 90% meines programms auch auskommentieren...



  • Ohne genauere Informationen kann man dir nicht sinnvoll helfen. Versuch mal, das Ganze auf ein Minimalbeispiel herunterzubrechen und gib dann die genaue Konfiguration (Debug/Release, statisch/dynamisch gelinkt, welche Bibliotheken gelinkt, ...) an.



  • mh, also ich einfach mal alles auskommentiert und nach und nach alles wieder aktiviert.

    das problem wird von sf::String ausgelöst. ok, dann werd ich da mal googlen, mal sehen ob ich was übersehen hab...

    danke schonmal 🙂

    edit:: halt stop, bis gerade dachte, das wäre die einzige stelle wo ich sf::String verwende, aber dem ist nicht so...
    ich habe noch einen dequesf::String und der macht keine linkerprobleme 😕 😕



  • #include <SFML\Graphics.hpp>
    #include <SFML\Window.hpp>
    #include <SFML\Config.hpp>
    #include <SFML\Audio.hpp>
    #include <SFML\System.hpp>
    #include <SFML\Window.hpp>
    #include <SFML\Network.hpp>
    
    #pragma comment(lib, "sfml-system-s-d.lib")
    #pragma comment(lib, "sfml-window-s-d.lib")
    #pragma comment(lib, "sfml-main-d.lib")
    #pragma comment(lib, "sfml-network-s-d.lib")
    #pragma comment(lib, "sfml-graphics-s-d.lib")
    #pragma comment(lib, "sfml-audio-s-d.lib")
    
    int main()
    {
        sf::String str;
        return 0;
    }
    

    hier crasht der linker schon mit oben genannten fehlern...

    einstellungen:
    mit multibyte zeichensatz, als multithreaded-debug-dll, ansonsten standard msvc2010 einstellungen

    /ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Debug\Bildbearbeitung.pch" /Fa"Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /analyze- /errorReport:queue
    

    beim linker mit zusätzlicher abhängigkeit von der "sfml-system-s-d.lib", als win32 konsolenanwendung

    /OUT:"D:****Programmpfad*****.exe" /INCREMENTAL /NOLOGO "sfml-system-s-d.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Debug\Bildbearbeitung.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:****Programmpfad*****.pdb" /SUBSYSTEM:CONSOLE /PGD:"D:****Programmpfad*****.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE
    

    soweit eig alles standard win32 console als debug, die zusätzlichen verzeichnisse musste ich etwas anpassen, aber daran kanns ja eigentlich nicht liegen...

    edit: auch als win32 non-console anwendung gehts nicht



  • hi,
    Ignoriere mal bei deinen Linkereinstellungen die Bibiliotheken:

    MSVCRTD.lib
    libcmt.lib


Anmelden zum Antworten