Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

13.09.2009, 13:52

SDL Linkerfehler

Hallo,
Ich bin am Verzweifeln: Beim Kompillieren des Game-Sourcecodes aus Kapitel 12 erscheint immer dieser eine Fehler

Zitat


1>Game.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp___CrtDbgReportW" in Funktion ""public: class std::list<class CAsteroid,class std::allocator<class CAsteroid> >::_Const_iterator<1> & __thiscall std::list<class CAsteroid,class std::allocator<class CAsteroid> >::_Const_iterator<1>::operator++(void)" (??E?$_Const_iterator@$00@?$list@VCAsteroid@@V?$allocator@VCAsteroid@@@std@@@std@@QAEAAV012@XZ)".
1>Player.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp___CrtDbgReportW".
1>C:\Editors\Microsoft Visual Studio 9.0\Projekte\SDL_Invaders\Debug\SDL_Invaders.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.


Ich kann mir das nicht erklären: Ich habe alle *.lib und *.h Ordner richtig angegeben. Auch das googeln des Problems brachte keine Lösung. Viele hatten ein ähnliches Problem und haben dann eine bestimmte *.lib ignoriert, bei führte das zu nur noch mehr Fehlermeldungen.
Ich benutze Microsoft Visual C++ 2008 Express Edition.

Ich bedanke mich im Vor raus für eure Antworten :D (Wiese wird in der Vorschau Vor-raus zu Sternchen gemacht, wenn ich es zusammen schreibe wie hier Vorraus) :lol:

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

13.09.2009, 14:08

Gibts da zufälligerweise ne Debug Version zu linken?

Voraus schreibt man eben nur mit einem r. ;)

goldfisch007

Alter Hase

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

3

13.09.2009, 14:14

hast du auch die "richtigen" libs gelinkt?
also debug bzw. release?
und debuggt?*keine ahnung ob das was bringt aba daskäme bestimmt sowieso ;) *
auserdem sagt dir die fehlermeldung ja das irgendwas in CAsteroid nicht stimmt (meines wissens)
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

4

13.09.2009, 20:09

Ich hab das Problem jetzt gelöst, indem ich bei Projekt\<Projektname>-Eigenschaften\Konfigurationseigenschaften\C/C++\Codegenerierung\Laufzeitbibliothek den Reiter auf Multithreaded-Debug-DLL
gestellt habe. Eventuell weist der Compiler einen darauf hin, dass eine bestimmte Standart-*.lib des Compilers stört, die Lösung wird gleich danach mit abgegeben: Einfach in der Befehlszeile
(Projekt\<Projektname>-Eigenschaften\Konfigurationseigenschaften\C/C++\Befehlszeile)

/NODEFAULTLIB[:<störende_bibliothek>.lib] eingeben.

Jetzt hab ich immer noch zwei Probleme:
1. Mich wundert das Multithreaded-Debug-DLL, da mann diese Option ja auch im Release-Modus benutzen kann, was hat Debug hier zu bedeuten

2.Im Multithreaded-(Debug-)DLL sind die Programme nur lauffähig, wenn auf dem Rechner Visual C++ 2008 installiert ist. Wenn ich aber den Reiter auf nur Multithreaded(-Debug) stelle(also so, dass alles nötige mitkompilliert wird), kommen wieder diverse Linker-Fehler. Insofern ist mein Problem nicht wirklich gelöst, da ich meinen Freunden schon gern mal das Spiel zeigen würde.

Danke aber für die Antworten!

PS: Der Tipp mit dem Debug-Modus bringt hier nix, da der nur funktioniert, wenn man das Programm kompillieren kann.

5

13.09.2009, 20:53

Grundsätzlich solltest du die Release-Version weitergeben.
Mit Multithreaded /Mt benötigt der Zielrechner keine weiteren C++ Laufzeitbibliotheken.

Welche Linkerfehler bekommst du denn noch?
fka tm

6

13.09.2009, 21:32

EDIT: Wenn mir dabei niemand helfen kann: Ich habe nicht ganz verstanden wo genau im Quelltext das gerenderte auf den Bildschrim gebracht wird. In der Flip-Funktioin oder schon irgendwo vorher?

Wenn ich mit Release + Multithreaded(-Debug ist egal) (/MTd) kompilliere kommt:

Zitat


1>SDLmain.lib(SDL_win32_main.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__fprintf".
1>C:\Editors\Microsoft Visual Studio 9.0\Projekte\SDL_Invaders\Release\SDL_Invaders.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.


Wenn ich mit Relase + Multithreaded(kein Debug)-DLL (/MD) kompilliere kommt:

Zitat


1>Asteroid.obj : error LNK2001: Nicht aufgelöstes externes Symbol "@__security_check_cookie@4".
1>Asteroid.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""void __cdecl operator delete(void *)" (??3@YAXPAX@Z)".
1>Asteroid.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)".
1>Game.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: virtual char const * __thiscall std::exception::what(void)const " (__imp_?what@exception@std@@UBEPBDXZ)".
1>Game.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: virtual __thiscall std::exception::~exception(void)" (__imp_??1exception@std@@UAE@XZ)".
1>Game.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall std::exception::exception(void)" (__imp_??0exception@std@@QAE@XZ)".
1>Game.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall std::exception::exception(char const * const &)" (__imp_??0exception@std@@QAE@ABQBD@Z)".
1>Game.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: __thiscall std::exception::exception(class std::exception const &)" (__imp_??0exception@std@@QAE@ABV01@@Z)".
1>Game.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp___invalid_parameter_noinfo".
1>Game.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__rand".
1>Game.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""const type_info::`vftable'" (??_7type_info@@6B@)".
1>Sprite.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__exit".
1>LINK : error LNK2001: Nicht aufgelöstes externes Symbol "_mainCRTStartup".
1>C:\Editors\Microsoft Visual Studio 9.0\Projekte\SDL_Invaders\Release\SDL_Invaders.exe : fatal error LNK1120: 13 nicht aufgelöste externe Verweise.


Wenn ich mit Debug + Multithreaded(kein Debug) (/MTd) kompilliere kommt:

Zitat


1>LINK : warning LNK4098: Standardbibliothek "LIBCMT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: Lokal definiertes Symbol "_isspace" wurde in _ParseCommandLine-Funktion importiert.
1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: Lokal definiertes Symbol "___iob_func" wurde in _ShowError-Funktion importiert.
1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: Lokal definiertes Symbol "_fclose" wurde in _cleanup_output-Funktion importiert.
1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: Lokal definiertes Symbol "_exit" wurde in _main-Funktion importiert.
1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: Lokal definiertes Symbol "_strrchr" wurde in _main-Funktion importiert.
1>libcpmtd.lib(stdthrow.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
1>libcpmtd.lib(cin.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
1>libcpmtd.lib(xmbtowc.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
1>Game.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__CrtDbgReportW" in Funktion ""public: class std::list<class CAsteroid,class std::allocator<class CAsteroid> >::_Const_iterator<1> & __thiscall std::list<class CAsteroid,class std::allocator<class CAsteroid> >::_Const_iterator<1>::operator++(void)" (??E?$_Const_iterator@$00@?$list@VCAsteroid@@V?$allocator@VCAsteroid@@@std@@@std@@QAEAAV012@XZ)".
1>Player.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
1>Menu.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
1>libcpmtd.lib(cout.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
1>libcpmtd.lib(xdebug.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__malloc_dbg" in Funktion ""void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)".
1>libcpmtd.lib(xmbtowc.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__malloc_dbg".
1>libcpmtd.lib(xdebug.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__free_dbg" in Funktion ""void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z)".
1>libcpmtd.lib(xmbtowc.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__free_dbg".
1>libcpmtd.lib(_tolower.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__calloc_dbg" in Funktion "__Getctype".
1>SDLmain.lib(SDL_win32_main.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__fprintf" in Funktion "_ShowError".
1>C:\Editors\Microsoft Visual Studio 9.0\Projekte\SDL_Invaders\Debug\SDL_Invaders.exe : fatal error LNK1120: 5 nicht aufgelöste externe Verweise.
Das Problem lässt sich auch nicht mit der Befehlszeile lösen, da

Zitat


1>cl : Befehlszeile warning D9002 : Unbekannte Option "/NODEFAULTLIB:LIBCMT.lib" wird ignoriert.


Wenn ich mit Debug + Multithreaded(-Debug) kompilliere kommt:

Zitat


1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: Lokal definiertes Symbol "_isspace" wurde in _ParseCommandLine-Funktion importiert.
1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: Lokal definiertes Symbol "___iob_func" wurde in _ShowError-Funktion importiert.
1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: Lokal definiertes Symbol "_fclose" wurde in _cleanup_output-Funktion importiert.
1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: Lokal definiertes Symbol "_exit" wurde in _main-Funktion importiert.
1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: Lokal definiertes Symbol "_strrchr" wurde in _main-Funktion importiert.
1>SDLmain.lib(SDL_win32_main.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__fprintf" in Funktion "_ShowError".
1>C:\Editors\Microsoft Visual Studio 9.0\Projekte\SDL_Invaders\Debug\SDL_Invaders.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.


Ein verrücktes Wirrwarr: Es funktioniert wirklich nur mit DEBUG/RELEASE Multithreaded-Debug-DLL[/b]

Werbeanzeige