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 toSDL_Init'
    /tmp/cc2gI0Je.o(.text+0x35): In function main': : undefined reference toSDL_GetError'
    /tmp/cc2gI0Je.o(.text+0x58): In function main': : undefined reference toSDL_Quit'
    /tmp/cc2gI0Je.o(.text+0x73): In function main': : undefined reference toSDL_SetVideoMode'
    /tmp/cc2gI0Je.o(.text+0x8a): In function main': : undefined reference toSDL_GetError'
    /tmp/cc2gI0Je.o(.text+0xb2): In function main': : undefined reference toSDL_Delay'
    collect2: ld returned 1 exit status

    Leider 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...


Log in to reply