Probleme mit SDL
-
Hallo,
um SDL auszuprobieren habe ich mir für Linux folgende Datei gezogen:
"SDL-devel-1.2.9-1.i386.rpm"
Und versucht zu installieren (bin ziemlicher Linux-Anfänger). Hat meiner Ansicht auch geklappt.Nun wollte ich gleich das mal ausprobieren.
Hier der Quellcode:#include <stdlib.h> #include <SDL/SDL.h> int main(int argc, char *argv[]) { SDL_Surface *screen; if (SDL_Init(SDL_INIT_VIDEO) == -1) { printf("Can't init SDL: %s\n", SDL_GetError()); exit(1); } atexit(SDL_Quit); screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE); if (screen == NULL) { printf("Can't set video mode: %s\n", SDL_GetError()); exit(1); } SDL_Delay(3000); return 0; }
Soweit so gut. Nun wollte ich das ganze compilieren und erhalte folgende Meldung:
/tmp/cc2gI0Je.o(.text+0x22): In function
main': : undefined reference to
SDL_Init'
/tmp/cc2gI0Je.o(.text+0x35): In functionmain': : undefined reference to
SDL_GetError'
/tmp/cc2gI0Je.o(.text+0x58): In functionmain': : undefined reference to
SDL_Quit'
/tmp/cc2gI0Je.o(.text+0x73): In functionmain': : undefined reference to
SDL_SetVideoMode'
/tmp/cc2gI0Je.o(.text+0x8a): In functionmain': : undefined reference to
SDL_GetError'
/tmp/cc2gI0Je.o(.text+0xb2): In functionmain': : undefined reference to
SDL_Delay'
collect2: ld returned 1 exit statusLeider klappt es eben nicht.
Wäre für Lösungsvorschläge sehr dankbar.Creeky
-
du musst die sdl.lib und sdlmain.lib mit einbinden
-
Auf Linux muss man eher die libSDL.a linken. Einfach -lsdl beim linken angeben. Ich glaube, es gibt auch ein config-Programm, das per Backtick die richtigen Libs liefert. libSDLmain.a ist unter Linux imho nicht erforderlich.
geloescht
-
Habe jetzt mal das ganze wie folgt gemacht:
gcc -o test test.c -lSDL
Aber nun gibt er mir blos noch mehr Fehlermeldungen aus.
Kleiner Ausschnitt:/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../libSDL.a(Xinerama.o)(.text+0x9f8): In function `SDL_XineramaQueryScreens': : undefined reference to `_XEatData' /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../libSDL.a(SDL_dgaevents.o)(.text+0x5b): In function `.L20': : undefined reference to `XNextEvent' /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../libSDL.a(SDL_fbevents.o)(.text+0x1088): In function `FB_OpenMouse': : undefined reference to `__ctype_b' /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../libSDL.a(SDL_fbelo.o)(.text+0x517): In function `eloSendQuery': : undefined reference to `__ctype_toupper' /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../libSDL.a(SDL_fbelo.o)(.text+0x701): In function `eloInitController': : undefined reference to `__ctype_tolower' collect2: ld returned 1 exit status
Was mach ich denn immer noch falsch?
-
Versuch mal
gcc -o test test.c `sdl-config--libs`
Anscheined sind die Libs unter Linux etwas komplizierter, weswegen man ein Hilfsprogramm braucht.
geloescht
-
gcc `sdl-config --libs --cflags` ...
sowas steht bestimmt auch in den tutorials auf www.libsdl.org
-
geloescht schrieb:
Anscheined sind die Libs unter Linux etwas komplizierter, weswegen man ein Hilfsprogramm braucht.
Das Hilfsprogramm hat man, damit man nicht wissen muss welche libs gelinkt werden müssen. So ist es systemunabhängig. Wem das zu einfach ist, der kann die libs natürlich auch per Hand dazulinken.
-
Backticks gehen unter DOS und Windows nicht. Also so betriebssystemabhängig ist es doch nicht.
-
betriebssystemunabhängig habe ich nicht geschrieben.
-
Du hast recht. Trotzdem, unter Windows macht man einfach -lSDL -lSDLmain und gut is...