On Sat, 12 Feb 2000, Tobias Kluge wrote:
Ich habe folgendes Problem: Ich wuerde gern mit gcc / egcc eine C-Datei uebersetzen, die eine Header-Datei importiert. Die Header-Datei ist im gleichen Verzeichnis und lesbar (im Bezug auf die Rechte des Users).
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
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.
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?
Der Fehler liegt nicht im Header. Wie man oben erkennen kann kommt der Fehler vom ld (Linker), Deine Kommandozeile haette so aussehen muessen:
gcc test1.c -lSDL
-lSDL bedeutet "Linke eine Datei namens libSDL.a oder libSDL.so hinzu", dort sind die viermissten Anweisungen zu finden. Achtung: eventuell muessen noch einige andere Bibos gelinkt werden.
Uebrigens solltest Du auch fprinf statt fprint benutzen, irgendwo haette da die Warnung "implicit declaration of int fprint(...)" vorher kommen muessen. Wegen sowas sollte man auch das Flag -Wall anschalten - damit bekommt man alle Warnungen des Compilers aufgetischt - ist manchmal recht hilfreich, andererseits oft auch verwirrend.
Literatur: *im selben Linux-Mag steht ein Artikel mit Compilern und Linkern fuer Anfaenger (S. 128) *Krueger: "Programmieren in C" - recht guter Einstieg in ANSI C *Stevens: "Programmierung in der Unix Umgebung" - sehr gute Einfuehrung (und Vertiefung) zur Unix/Linux Programmierung - incl. Linker, Bibos usw. *allgemein: die Buecher von den Verlagen Addison-Wesley und O'Reilly sind durchweg als gut zu empfehlen. Du solltest allerdings vorher einen Blick hineinwerfen, ob es Dein Level ist. Deutsche Verlage, wie MArkt&Technik oder gar Springer kann man voll vergessen - die haben die ganzen schwafelnden Autoren, die viel reden aber nix sagen.
Konrad