Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
SDL impossible de compiler
Envoyé par: yugiohjcj.free.fr

Bonjour,
je suis sous Debian (stable) et je n'arrive pas à compiler un simple programme C avec la librairie SDL qui l'initialise:
/********************
* Attaque Alien *
* version 1.00 *
* pour GNU/Linux *
*********************/

#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>

int initSDL(){
/*Initialisation de SDL*/
if(SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO)<0){
fprintf(stderr, "Impossible d'initialiser SDL: %s\n", SDL_GetError());
exit(0);
}//Fin de la boucle if(SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO)<0)
atexit(SDL_Quit);
return(0);
}

int main(int argc, char *argv[]){
initSDL();
return(0);
}
Je fais:
gcc -o fichier fichier.c -lSDLmain -lSDL
comme je le faisais quand j'étais sous Windows avec minGW sauf que je rajoutais:
gcc -o fichier fichier.c -lmingw32 -lSDLmain -lSDL -mwindows
Mais j'ai l'erreur suivante:
/usr/lib/libSDL.so: référence indéfinie vers `pthread_create'
/usr/lib/libSDL.so: référence indéfinie vers `pthread_cancel'
/usr/lib/libSDL.so: référence indéfinie vers `sem_destroy'
/usr/lib/libSDL.so: référence indéfinie vers `sem_wait'
/usr/lib/libSDL.so: référence indéfinie vers `sem_post'
/usr/lib/libSDL.so: référence indéfinie vers `pthread_mutexattr_setkind_np'
/usr/lib/libSDL.so: référence indéfinie vers `sem_init'
/usr/lib/libSDL.so: référence indéfinie vers `pthread_sigmask'
/usr/lib/libSDL.so: référence indéfinie vers `sem_trywait'
/usr/lib/libSDL.so: référence indéfinie vers `pthread_mutexattr_init'
/usr/lib/libSDL.so: référence indéfinie vers `sem_getvalue'
/usr/lib/libSDL.so: référence indéfinie vers `pthread_join'
/usr/lib/libSDL.so: référence indéfinie vers `pthread_cond_timedwait'
collect2: ld returned 1 exit status
Pourtant j'ai bien fait:
apt-get install libsdl1.2-dev

Poste le Thursday 19 August 2004 00:03:10
Répondre     Citer    
Re: SDL impossible de compiler
Envoyé par: Mickael scherer

ajoute -lpthread au makefile, pour faire le link ?

Tu devrait utiliser SDL-config --cflags pour avoir les flags.

Poste le Thursday 19 August 2004 10:08:57
Répondre     Citer    
Re: SDL impossible de compiler
Envoyé par: EdB

Comment ca s'utilise SDL-config --cflags? on le balance juste dans la ligne de compilation ? Enfin je veux dire dans l'optique ou l'on ne sait pas avec quel flags a ete compiler la lib parce que c'est compilé par quelqu'un d'autre.

Poste le Thursday 19 August 2004 13:33:00
Répondre     Citer    
Re: SDL impossible de compiler
Envoyé par: yugiohjcj.free.fr

Ouais Mickael scherer explique un peu.
Je dois faire quoi?
Je n'utilise pas de makefile pour compiler.
Je veux juste taper la commande:
gcc -o fichier fichier.c ***
Et ce qu'il me manque c'est *** je pense.
je croyais qu'il fallait taper:
gcc -o fichier fichier.c -lSDLmain -lSDL
Mais on dirait que ça suffit pas...

Poste le Thursday 19 August 2004 21:36:24
Répondre     Citer    
Re: SDL impossible de compiler
Envoyé par: yugiohjcj.free.fr

Oui c'est ça ça marche!!!Merci Mickael scherer!
Trop cool :
gcc -o fichier fichier.c -lSDLmain -lSDL -lpthread

Pourquoi sous GNU/Linux je dois rajouter ça : -lpthread ?
ça veut dire quoi exactement?

Poste le Thursday 19 August 2004 21:38:40
Répondre     Citer    
Re: SDL impossible de compiler
Envoyé par: yugiohjcj.free.fr

Par contre j'ai un nouveau problème.
Lorsque j'essai de créer une fenêtre:
ecran=SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
Et ben le compilateur me sort:
x-com.c: In function `main':
x-com.c:48: `ecran' undeclared (first use in this function)
x-com.c:48: (Each undeclared identifier is reported only once
x-com.c:48: for each function it appears in.)

Pourtant j'ai bien charger la surface ecran...Faut-il que j'installe d'autres paquets que libsdl1.2-dev pour pouvoir utiliser SDL_SetVideoMode() ?

Poste le Thursday 19 August 2004 22:10:13
Répondre     Citer    
Re: SDL impossible de compiler
Envoyé par: LuCKy

-lpthread indique que la bibliotheque libpthread.so doit est linkée a ton appli. C'est du au fait que libSDL a ete elle meme linkée avec pthread lors de la compilation donc tous les programmes qui utiliseront libsdl devront etre linkés avec libpthread.
Comme le suggerait Mickael, le mieux, c'est de compiler avec sdl-config :
gcc -o fichier fichier.c `sdl-config --cflags`
les ` sont des back-quotes (alt gr + 7)

Quant a ton erreur de 'ecran' undeclared, ca a plus a voir avec la syntaxe de ton programme qu'avec les packages je pense ... A mon avis, ta variable ecran est mal declarée, pas declarée du tout ou alors tu as oublié d'include un header (.h)

Bonne continuation

Poste le Friday 20 August 2004 04:54:57
Répondre     Citer    
Re: SDL impossible de compiler
Envoyé par: yugiohjcj.free.fr

> Quant a ton erreur de 'ecran' undeclared, ca a plus a voir avec la syntaxe de ton programme qu'avec les packages je pense ... A mon avis, ta variable ecran est mal declarée, pas declarée du tout ou alors tu as oublié d'include un header (.h)

Je ne crois pas. J'utilisais le même code quand j'arrivais à compiler sous Windaube:

/*****************
* Attaque Alien *
* version 1.00 *
* pour GNU/Linux *
******************/

#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>

/*Fonction pour initialiser SDL*/
int initSDL(){
if(SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO)<0){
fprintf(stderr, "Impossible d'initialiser SDL: %s\n", SDL_GetError());
exit(0);
}//Fin de la boucle if(SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO)<0)
atexit(SDL_Quit);
return(0);
}
/*-----------------------------*/

/*Fonction pour charger les surfaces*/
int chargSurf(){
SDL_Surface *ecran, *image;
return(0);
}
/*----------------------------------*/

/*Fonction pour charger les informations de la fenêtre*/
int ifenetre(){
SDL_WM_SetCaption("X-COM", NULL);
if(fopen("./bmp/icone.bmp", "r")==NULL){
fprintf(stderr, "Impossible de charger l'icône du programme.\n");
exit(0);
}//Fin de la boucle if(fopen("./bmp/icone.bmp", "r")==NULL)
SDL_WM_SetIcon(SDL_LoadBMP("./bmp/icone.bmp"),NULL);
return(0);
}
/*----------------------------------*/

int main(int argc, char *argv[]){
/*Initialisation de SDL*/
initSDL();
/*Chargement des surfaces*/
chargSurf();
/*Chargement des informations de la fenêtre*/
ifenetre();
ecran=SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
return(0);
}

Tu vois un problème? Je pense que ça doit venir d'un paquet supplémentaire à installer sur ma Debian...

Poste le Tuesday 24 August 2004 19:29:25
Répondre     Citer    
Re: SDL impossible de compiler
Envoyé par: YuGiOhJCJ

Aidez-moi SVP.
Mon code est correct non?
Je ne devrais pas avoir ce message?


Poste le Tuesday 31 August 2004 18:05:37
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
SDL impossible de compiler
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons