error LNK2005



  • ich habe ein kleines Spiel mit der SDL (SimpleMediaLayer) geschrieben doch beim debuggen kommen immer folgende Linkfehler und ich weis nicht wiso.

    Framework.obj : error LNK2005: _SDL_main ist bereits in CShot.obj definiert.
    1>Framework.obj : error LNK2005: "class CTimer * g_pTimer" (?g_pTimer@@3PAVCTimer@@A) ist bereits in CShot.obj definiert.
    1>Framework.obj : error LNK2005: "class CFramework * g_pFramework" (?g_pFramework@@3PAVCFramework@@A) ist bereits in CShot.obj definiert.
    1>Framework.obj : error LNK2005: "struct SDL_Surface * m_pScreen" (?m_pScreen@@3PAUSDL_Surface@@A) ist bereits in CShot.obj definiert.
    1>Game.obj : error LNK2005: _SDL_main ist bereits in CShot.obj definiert.
    1>Game.obj : error LNK2005: "class CTimer * g_pTimer" (?g_pTimer@@3PAVCTimer@@A) ist bereits in CShot.obj definiert.
    1>Game.obj : error LNK2005: "class CFramework * g_pFramework" (?g_pFramework@@3PAVCFramework@@A) ist bereits in CShot.obj definiert.
    1>Game.obj : error LNK2005: "struct SDL_Surface * m_pScreen" (?m_pScreen@@3PAUSDL_Surface@@A) ist bereits in CShot.obj definiert.
    1>main.obj : error LNK2005: _SDL_main ist bereits in CShot.obj definiert.
    1>main.obj : error LNK2005: "class CTimer * g_pTimer" (?g_pTimer@@3PAVCTimer@@A) ist bereits in CShot.obj definiert.
    1>main.obj : error LNK2005: "class CFramework * g_pFramework" (?g_pFramework@@3PAVCFramework@@A) ist bereits in CShot.obj definiert.
    1>main.obj : error LNK2005: "struct SDL_Surface * m_pScreen" (?m_pScreen@@3PAUSDL_Surface@@A) ist bereits in CShot.obj definiert.
    1>Sprite.obj : error LNK2005: _SDL_main ist bereits in CShot.obj definiert.
    1>Sprite.obj : error LNK2005: "class CTimer * g_pTimer" (?g_pTimer@@3PAVCTimer@@A) ist bereits in CShot.obj definiert.
    1>Sprite.obj : error LNK2005: "class CFramework * g_pFramework" (?g_pFramework@@3PAVCFramework@@A) ist bereits in CShot.obj definiert.
    1>Sprite.obj : error LNK2005: "struct SDL_Surface * m_pScreen" (?m_pScreen@@3PAUSDL_Surface@@A) ist bereits in CShot.obj definiert.
    1>LINK : fatal error LNK1123: Fehler bei der Konvertierung in COFF: Datei ist ungültig oder beschädigt.
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Ich würde mich sehr über hilfe freuen



  • Diese Fehler kommen nicht beim Debuggen, sondern beim Linken. Der Linker sagt dir, dass SDL_main, g_pTimer, g_pFramework und m_pScreen mehrfach definiert sind. Ich würde mal vermuten, dass du die in einen Header geschrieben hast, der in mehreren .cpp Files inkludiert wird!? Das geht natürlich nicht...



  • nein habe ich nicht ich habe gerade den kompletten Quellcode durchgeschaut.



  • kann es sein das es daran ligt weil ich visual 2012 und 2010 auf dem rechner habe?



  • Nein, es liegt daran, dass die genannten Dinge mehrfach definiert sind, wie ja selbst die Fehlermeldungen schon klar und deutlich sagen...



  • Wahrscheinlich steht in einer deiner Header-Dateien sowas wie "CTimer *g_pTimer;", was dann von all deinen cpp's includet wird, weshalb es mehrere g_pTimer gibt, was der Linker nicht mag.
    Schreib stattdessen "CTimer *g_pTimer;" in genau eine cpp und "extern CTimer *g_pTimer;" in den Header, dann gehen die Linkerfehler weg.



  • aber bei einem neuen projekt mit nur einer leeren klasse kommt auch dieser fehler :

    LINK : fatal error LNK1123: Fehler bei der Konvertierung in COFF: Datei ist ungültig oder beschädigt.



  • Der kommt möglicherweise daher, dass die SDL Library, die du da zu linken versuchst, kaputt oder eben einfach keine für den Compiler passende Library ist...


Anmelden zum Antworten