Newsgroup: it.comp.os.linux.development
Titolo: SDL - primi problemi

Ciao a tutti, ho sacricato le librerie sdl dal sito ufficiale, 
le ho installate come diceva il sito, ma ogni volta che tento di 
compilare mi da due tipi di errori differenti, in base all'include
che suo per includere le librerie (l'esempio che posto e' un 
tentativo di compilazione del primo esempio di Linux&C. n° 29)
gcc sdl1_src.c -o sdl1
sdl1_src.c:2:17: SDL.h: No such file or directory
sdl1_src.c:4: parse error before "vid_flags"
sdl1_src.c:4: `SDL_HWSURFACE' undeclared here (not in a function)
sdl1_src.c:4: warning: data definition has no type or storage class
sdl1_src.c:9: parse error before '*' token
sdl1_src.c:9: warning: data definition has no type or storage class
sdl1_src.c: In function `main':
sdl1_src.c:15: `SDL_INIT_VIDEO' undeclared (first use in this function)
sdl1_src.c:15: (Each undeclared identifier is reported only once
sdl1_src.c:15: for each function it appears in.)
sdl1_src.c:21: warning: assignment makes pointer from integer without a cast
sdl1_src.c:33: `SDL_Event' undeclared (first use in this function)
sdl1_src.c:33: parse error before "event"
sdl1_src.c:35: `event' undeclared (first use in this function)
sdl1_src.c:39: `SDL_QUIT' undeclared (first use in this function)
se compilo con #include <SDL.h>
gcc sdl1_src.c -o sdl1
/tmp/cc23ipxG.o: In function `main':
/tmp/cc23ipxG.o(.text+0x1d): undefined reference to `SDL_Init'
/tmp/cc23ipxG.o(.text+0x2f): undefined reference to `SDL_GetError'
/tmp/cc23ipxG.o(.text+0x67): undefined reference to `SDL_SetVideoMode'
/tmp/cc23ipxG.o(.text+0x7d): undefined reference to `SDL_GetError'
/tmp/cc23ipxG.o(.text+0x9c): undefined reference to `SDL_Quit'
/tmp/cc23ipxG.o(.text+0xb5): undefined reference to `SDL_WM_SetCaption'
/tmp/cc23ipxG.o(.text+0xcc): undefined reference to `SDL_PollEvent'
/tmp/cc23ipxG.o(.text+0xfe): undefined reference to `SDL_Quit'
collect2: ld returned 1 exit status
se compilo con #include <SDL/SDL.h>
 Dov'e' il problema???
 grazie a tutti
 Gabo

 tentativo di compilazione del primo esempio di Linux&C. n° 29)
Non dici al linker di linkare la libreria, quindi lui non trova da nessuna 
parte dei simboli corrispondenti ai nomi delle funzioni e delle variabili 
che definisci e te lo segnala.
Se non includi l'header non arriva nemmeno a linkare, perche' si interrompe 
prima non trovando alcune define e in generale segnalandoti errori sui 
valori di ritorno delle funzioni (ma solo quest'ultimo non sempre basta a 
interrompere la compilazione).
Mettiamo che a te interessi i linking dinamico:
    gcc sdl1_src.c -o sdl1 -lSDL
Controlla di avere nel path delle librerie la libreria richiesta 
(libSDL.so).
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 (libSDL.so).
Scusa la mia ignoranza (sono ancora solo uno studente di informatica) e
correggimi se sbaglio: linking dinamico = nel codice non c'è una copia
delle librerie che quindi devono essere presenti sul sistema su cui si
compila il codice. O sbaglio?
Io probabilmente ho solo le librerie denominate, se nn ricordo male,
develop, quindi mi sa che non sono adatte al linking dinamico (infatti
compilando come mi consigli mi da un sacco di errori!!)... ora vado
a cercare se trovo qualcosa!!
Se ho detto stupidaggini bastonami pure, magari imparo qualcosa :)
Un'ultima cosa: quale dovrebbe essere il path di libSDL.so??
tnx
Gabo

Dato che ci siamo ti faccio ancora una domanda...
Ho scaricato dal sito di SDL le man pages, ho estratto il tutto e mi trovo
con un sacco di file... basta che li copio nel posto giusto per accedervi
con man SDL_pippo da terminale? Se si, in che directory li devo copiare?
tnx 
Gabo

 Un'ultima cosa: quale dovrebbe essere il path di libSDL.so??
Dovrebbe essere /usr/lib o al massimo in /usr/local/lib.
Gli include invece dovrebbero essere in /usr/include o /usr/local/include.
-- 
Stefano Gatti 
Email: 
stefano.ga...@tin.it
 (togliere .levami)
Web: 
digilander.libero.it/sg67

E infatti ho scaricato le altre librerie, le run time libraries, ed ora
......... continua a non funzionare :(((
Cmq non demordo, mi solleva il fatto che gli errori che ora mi da linkando
dinamicamente sono decisamente meno (anche perchè prima linkavo verso una
lib inesistente :)
ed ecco qua gli errori, compilando un codice scritto da me (molto simile a
quello degli esempi di prima):
$ gcc Grafica1.c -o g -lSDL
Grafica1.c: In function `main':
Grafica1.c:8: warning: return type of `main' is not `int'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `pthread_create'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `pthread_cancel'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `sem_destroy'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `sem_wait'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `sem_post'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `sem_init'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `pthread_sigmask'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `sem_trywait'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `pthread_mutexattr_init'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `sem_getvalue'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libSDL.so: undefined reference to `pthread_join'
collect2: ld returned 1 exit status
???
Tnx
Gabo
P.S.
Scusa i vari post (potevo anche scriverne uno solo, ma le cose mi venivano
in mente strada facendo)

 Gli include invece dovrebbero essere in /usr/include o /usr/local/include.
tnx, ho trovato i file che diceva Mox, ma il linking dinamico continua a
non funzionare... devo per caso scaricare anche i sorgenti??
Gabo

  Dov'e' il problema???
prova con
gcc -o sdl1 `sdl-config --libs` `sdl-config --cflags` sdl1_src.c
(Nota che ho usato [`] e _non_ ['])
-- 
Ikitt

 
Dichiara il main come int main e restituisci 0 alla fine del prog...
Poi ad okkio manca il link alla libreria pthread, aggiungi -lpthread
gcc Grafica1.c -o g -lSDL -lpthread
Ciao
-- 
Alessandro <Comix> Cominu
http://hydrogen.sf.net
e-mail: 
co...@despammed.com
Icq: 116354077
Linux User # 203765
[...Codito Ergo Sum...]

 se compilo con #include <SDL.h>
Il file sorgente va bene cosě, ma compila con:
gcc sdl1_src.c -o sdl1 `sdl-config --cflags --libs`
-- 
Saluti,
    Mardy
http://castellina.org/interlingua

Sono finalmente riscito a compilare il mio codice, ci sono voluti un po'
di giorni, ma ce l'ho fatta!!
Volevo rinfraziarvi tutti e farvi un'ultima domanda: che differenza c'è
tra includere "SDL/SDL.h" e "SDL.h" (con quest'ultimo non mi funziona il
link dinalmico...)?
tnx
Gabo

Gabo wrote:

#include "SDL/SDL.h"
Cerca un file chiamato SDL.h, in una cartella SDL che si trova
a) nei path standard di inclusione (per esempio /usr/include)
b) in un qualunque path che tu gli specifichi (man gcc e cerca l'opzione -I)
Ovviamente se non hai modificato il path standard per la ricerca degli 
include, il file SDL.h si trova in SDL/ e tu includi solo SDL.h ovviamente 
non lo trova, quindi ti segnala errore (errore su ogni singolo simbolo non 
trovato, errore su ogni funzione di cui controlli il valore, ma che non 
ritorni int, a meno che non usi il GCC 3).
Non ti "funziona il link dinamico" perche' il linker non viene invocato, 
visto che le fasi precedenti falliscono e non puo' quindi segnalarti gli 
errori :)
