On Sat, Feb 12, 2000 at 10:56:27AM +0100, Tobias Kluge wrote:
Ich rufe egcc so auf: egcc test1.c
Die Include-Anweisung: #include "SDL.h"
Die Fehlermeldung: /tmp/ccUjSHc2.o: In function `main': /tmp/ccUjSHc2.o(.text+0x9): undefined reference to `SDL_Init' /tmp/ccUjSHc2.o(.text+0x17): undefined reference to `SDL_GetError' /tmp/ccUjSHc2.o(.text+0x26): undefined reference to `fprint' /tmp/ccUjSHc2.o(.text+0x38): undefined reference to `SDL_Quit' /tmp/ccUjSHc2.o(.text+0x53): undefined reference to `SDL_SetVideoMode' /tmp/ccUjSHc2.o(.text+0x66): undefined reference to `SDL_GetError' /tmp/ccUjSHc2.o(.text+0x8b): undefined reference to `SDL_EventState' /tmp/ccUjSHc2.o(.text+0x97): undefined reference to `SDL_WaitEvent' collect2: ld returned 1 exit status
Das Compilieren hat geklappt, nur das Linken nicht. Du verwendest in deiner test1.c die SDLxxxx-Funktionen. Beim Compilieren der test1.c ist nur wichtig, dass die Funktionen irgendwo definiert sind. Das sind sie - in der SDL.h naehmlich. Diesen Schritt kannst du erstmal mit "gcc -c -o test1.o test1.c" abschliessen. test1.o ist dann das, was in deinem Beispiel /tmp/ccUjSHc2.o ist. So wie du den Compiler aufgerufen hast, also ohne -c, wird am Ende gleich noch der Linker angeworfen um aus dem Object-file und ggf. einigen Bibliotheken das fertige Programm zu bauen. Der Linker (ld) muss nun zu allen in test1.o definierten Funktionen auch den eigentlichen Code finden. Die Funktion SDL_Quit ist zwar in SDL.h definiert, die Implementation der Funktion steht aber woanders drin - entweder in einer Bilbliothek oder einem anderen Objectfile. Das musst du mit hinzulinken. z.B. so falls es einen shared library ist (libSDL.so.xxx) gcc test1.o -lSDL -o test1 oder gcc test1.o libSDL.a -o test1 oder gcc test1.o SDL.o -o test1
Wie unschwer zu erkennen ist, habe ich versucht, das SDL-Beispiel aus dem aktuellen Linux-Magazin nachzuvollziehen. Allerdings sind meine Kenntnisse im Umgang mit den C-Compilern sehr gering.
Um das ganze zu kapieren wuerde ich mir an deiner Stelle ein fertiges kleines Programmpaket suchen und versuchen zu verstehen, was beim Aufruf von 'make' gemacht wird.
Kann mir jemand ein geeignetes Buch empfehlen, das C und C++ - Programmierung erklärt und vielleicht noch etwas zu den Linux-C-Compilern erzählt?
Sehr zu empfehlendes Standardwerk zu C ist das Buch von Kernighan/Ritchie (2.Auflage, deutsche Version vom Hanser-Verlag, Titel ist wohl "Programmieren in C") Bin mir nicht ganz sicher, da ich das Buch gerade verliehen habe. Zu C++ kenne ich nur den Stroustrup-Waelzer naeher ueber den die Meinungen weit auseinandergehen. Fuer Anfaenger ist es definitiv ungeeiggnet.
Solche Buecher behandeln nur die Programmiersprachen an sich, nicht den Umgang mit einem Compiler. Such dir dafuer mal jemanden, der davon Ahnung hat und es dir erklaeren kann. Buecker fuer sowas halte ich nicht fuer sinnvoll, da die dann total compiler- und plattformspezifisch sind. Vor allem wenn da gross "Linux" draufsteht waere ich skeptisch.
Reinhard