Newsgroup: it.comp.os.linux.development
Titolo: compilare un programma che usa la libreria SDL

Come faccio a compilare un programma che usa la libreria SDL?
Se cerco di cmpilare il semplice programma di esempio:
#include <stdlib.h>
#include <SDL.h>
main(int argc, char *argv[])
{
    if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) {
        fprintf(stderr, "Impossibile inizializzare " \
                        "SDL: %s\n", SDL_GetError());
        exit(1);
    }
    atexit(SDL_Quit);
}
se compilo con gcc esempio1_sdl.c -o esempio1_sdl ottengo i seguenti
errori:
esempio1_sdl.c:2:17: SDL.h: No such file or directory
esempio1_sdl.c: In function `main':
esempio1_sdl.c:6: error: `SDL_INIT_AUDIO' undeclared (first use in this function)
esempio1_sdl.c:6: error: (Each undeclared identifier is reported only once
esempio1_sdl.c:6: error: for each function it appears in.)
esempio1_sdl.c:6: error: `SDL_INIT_VIDEO' undeclared (first use in this function)
esempio1_sdl.c:7: error: `stderr' undeclared (first use in this function)
esempio1_sdl.c:11: error: `SDL_Quit' undeclared (first use in this function)
sicuramente la libreria esiste, la 1.2.7, ho installato anche la 1.2.8, ma
non succede niente.
Qualche consiglio?
Pete

 Qualche consiglio?
non e' stata inclusa , forse perche' e' in un path diverso da quello
standard del c. prova ad includerla a mano nel Makefile
Red

 
http://www.campana.vi.it/ottavio/Linux/faq-icold.txt
Alessandro.

 se compilo con gcc esempio1_sdl.c -o esempio1_sdl ottengo i seguenti
non trova SDL.h, ma anche una volta che riuscirai a risolvere questo
problema non riuscirai comunque a compilare perchè sdl va linkata!
dopo che risolvi il problema dell'header disperso per compilare usa:
gcc file.c -o file `sdl-config --libs`
(nota i backticks)
-- 
[Filippo...........................]
[Linux User #342745................]
        ==[...penguin powered...]==

 Qualche consiglio?
Mai sentito parlare delle opzioni del gcc -I (per specificare path 
aggiuntivi di file header) o -L (per specificare path aggiuntivi per
le librerie) o -l (L minuscolo, per linkare la libreria SDL)?!?!?

 }
Sulla necessita' di -I e -L ti hanno gia' detto; ma --- a cose serve
chiamare atexit(SDL_Quit) *DOPO* che le chiamate alla libreria hanno
gia' avuto la possibilita' di sbagliare?  Non dovrebbe essere la prima
istruzione?
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg

 istruzione?
A dire il vero questo e' un esempio che ho trovato sul sito di SDL, nella
documentazione in linea. MI serviva solo per capire come creare un
piccolo programmino grafico. Qualche anno fa usavo la svgalib, senza alcun
problema. Ora volevo passare a qualcosa di piu' aggiornato, ho provato
anche le librerie che emulano le librerie grafiche del Turbo Pascal, ma
non vanno bene per Mandrake 10.2.
Ad ogni modo, solo per iniziare, come devo procedere? Il file SDL.H l'ho cercate con il comando
$ whereis SDL.H
e l'ho trovato in 
SDL: /usr/lib/SDL /usr/include/SDL /usr/share/man/man3/SDL.3pm.bz2
Ora, cosa altro devo cercare, e come devo operare?
MI sere solo un piccolo consiglio.
Franc

 
se il tuo programmino si chiama prova.c, compilalo così:
gcc prova.c -I/usr/include/SDL -L/usr/lib/SDL -lSDL -o nomefileoutput
Ciao, Alberto

 
Ciao, Alberto, ti ringrazio per il tuo consiglio, ho provato, ma ottengo
questa sfilza di messaggi di errori (questo e' solo un estratto ...)
: undefined reference to `_XReply'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x1e0): In function `SDL_XPanoramiXQueryVersion':
: undefined reference to `XMissingExtension'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x244): In function `SDL_XPanoramiXQueryVersion':
: undefined reference to `_XFlush'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x320): In function `SDL_XPanoramiXGetState':
: undefined reference to `_XReply'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x364): In function `SDL_XPanoramiXGetState':
: undefined reference to `XMissingExtension'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x3c4): In function `SDL_XPanoramiXGetState':
: undefined reference to `_XFlush'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x490): In function `SDL_XPanoramiXGetScreenCount':
: undefined reference to `_XReply'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x4d4): In function `SDL_XPanoramiXGetScreenCount':
: undefined reference to `XMissingExtension'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x534): In function `SDL_XPanoramiXGetScreenCount':
: undefined reference to `_XFlush'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x607): In function `SDL_XPanoramiXGetScreenSize':
: undefined reference to `_XReply'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x654): In function `SDL_XPanoramiXGetScreenSize':
: undefined reference to `XMissingExtension'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x6c4): In function `SDL_XPanoramiXGetScreenSize':
: undefined reference to `_XFlush'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x7dd): In function `SDL_XineramaIsActive':
: undefined reference to `_XReply'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x856): In function `SDL_XineramaIsActive':
: undefined reference to `_XFlush'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x908): In function `SDL_XineramaQueryScreens':
: undefined reference to `_XReply'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x95e): In function `SDL_XineramaQueryScreens':
: undefined reference to `XMissingExtension'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x987): In function `SDL_XineramaQueryScreens':
: undefined reference to `_XFlush'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0x9f1): In function `SDL_XineramaQueryScreens':
: undefined reference to `_XRead'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(Xinerama.o)(.text+0xa6a): In function `SDL_XineramaQueryScreens':
: undefined reference to `_XEatData'
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.3/../../../libSDL.a(SDL_dgaevents.o)(.text+0x5c): In function `.L20':
: undefined reference to `XNextEvent'
collect2: ld returned 1 exit status
Boh! Che significa?
Franc

 gcc prova.c -I/usr/include/SDL -L/usr/lib/SDL -lSDL -o nomefileoutput
prova a fare così:
gcc prova.c -I/usr/include/SDL $(sdl-config --libs) -o nomefileoutput


 gcc prova.c -I/usr/include/SDL $(sdl-config --libs) -o nomefileoutput
Ottengo sempre una sfilza chilometrica di errori.
Franc_

 Franc_
Guarda l'output dei comandi:
sdl-config --cflags
e
sdl-config --libs
Ed aggiungi quello che ottieni alla linea di compilazione
oppure puoi fare in modo che venga risolto "inline":
gcc -o prova prova.c `sdl-config --cflags --libs`
Gli apici della linea precedente sono backquote, accenti, non apostrofi, 
con la concavita` rivolta verso destra.
Bye,
  Gabry