IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème makefile + librairie


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Par défaut Problème makefile + librairie
    Bonjour,
    Voila mon probleme : Lorsque j'essaie de compiler mon projet SDL a l'aide de mon makefile cela me donne une suite de "undefine reference to.." ( pour chaque fonction SDL utilisé.

    Voici mon makefile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    DEBUG=yes
    CC=gcc
    LIBRARY_SDL=./lib/
    INCLUDE_SDL=./include/
     
    ifeq ($(DEBUG),yes)
    CFLAGS:=-W -Wall -ansi -pedantic -g -I$(INCLUDE_SDL)
    LDFLAGS:= -L$(LIBRARY_SDL) -lSDL -lSDLmain -lSDL_image
    else
    CFLAGS:=-W -Wall -ansi -pedantic -I$(INCLUDE_SDL)
    LDFLAGS:= -L$(LIBRARY_SDL) -lSDL -lSDLmain -lSDL_image
    endif
     
    EXEC:=$(shell grep -l "int main" *.c | cut -d . -f 1) 
    SRC:=$(shell ls *.c)
    OBJ:=$(SRC:.c=.o)
     
    all: $(EXEC)
    ifeq ($(DEBUG),yes)
    @echo "Generation en mode debug"
    else
    @echo "Generation en mode release"
    endif
     
    main: $(OBJ)
    @$(CC) -o $@ $^ $(LDFLAGS)
     
    .SUFFIXES: .c
     
    %.o: %.c
    @$(CC) -o $@ -c $< $(CFLAGS)
     
    depend:
    makedepend -- $(CFLAGS) -- $(SRC)
     
    .PHONY: clean mrproper
     
    clean: 
    @rm -rf *.o *~
     
    mrproper: clean
    @rm -rf ${EXEC}
    comme vous pouvez le constater, a priori, l'edition de lien est presente...

    Voici maintenant mon fichier source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL.h>
    #include <SDL_image.h>
     
    int main(int argc, char *argv[])
    {
    	int continuer=1;
    	SDL_Surface *ecran = NULL;
    	SDL_Event event;
     
    	SDL_Init(SDL_INIT_VIDEO);
    	ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
    	SDL_WM_SetCaption("Gestion des évènements en SDL", NULL);
    	while (continuer){
    		SDL_WaitEvent(&event);
    		switch(event.type)
    		{
    			case SDL_QUIT:
    				continuer = 0;
    				break;
    			case SDL_KEYDOWN:
    				switch(event.key.keysym.sym)
    				{
    					case SDLK_ESCAPE:
    					continuer = 0;
    					break;
    				}
    				break;
    		}
    	}
     
    	SDL_Quit();
     
    	return EXIT_SUCCESS;
    }
    et enfin, voici l'organisation de mon dossier de projet :

    .:
    include Makefile project1.c project3.c src
    lib project2.c sdl-config

    ./include:
    begin_code.h SDL_config.h SDL_image.h SDL_mutex.h SDL_syswm.h
    close_code.h SDL_cpuinfo.h SDL_joystick.h SDL_name.h SDL_thread.h
    SDL SDL_endian.h SDL_keyboard.h SDL_opengl.h SDL_timer.h
    SDL_active.h SDL_error.h SDL_keysym.h SDL_platform.h SDL_types.h
    SDL_audio.h SDL_events.h SDL_loadso.h SDL_quit.h SDL_version.h
    SDL_byteorder.h SDL_getenv.h SDL_main.h SDL_rwops.h SDL_video.h
    SDL_cdrom.h SDL.h SDL_mouse.h SDL_stdinc.h

    ./include/SDL:
    begin_code.h SDL_cpuinfo.h SDL_joystick.h SDL_name.h SDL_thread.h
    close_code.h SDL_endian.h SDL_keyboard.h SDL_opengl.h SDL_timer.h
    SDL_active.h SDL_error.h SDL_keysym.h SDL_platform.h SDL_types.h
    SDL_audio.h SDL_events.h SDL_loadso.h SDL_quit.h SDL_version.h
    SDL_byteorder.h SDL_getenv.h SDL_main.h SDL_rwops.h SDL_video.h
    SDL_cdrom.h SDL.h SDL_mouse.h SDL_stdinc.h
    SDL_config.h SDL_image.h SDL_mutex.h SDL_syswm.h

    ./lib:
    libSDL.a libSDL_image.la libSDL.la libSDL.so
    libSDL_image.a libSDL_image.so libSDLmain.a pkgconfig

    ./lib/pkgconfig:
    sdl.pc

    Mon but etant de ne pas installer la librairie a proprement parler si possible dans le dossier /usr/lib (sous linux) et donc de travailler directement a partir des fichier present dans mon dossier.

    Merci d'avance ^^

  2. #2
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Il me semble qu'avec pkgconfig, il suffit d'utiliser pkgconfig pour generer correctement les flags (pour la compil et le link); regarde les options de pkgconfig.

    Après, enlève les '@' devant les $(CC) pour nous montrer les commandes réellement executée par make.

    Enfin, montre nous quelques lignes d'erreurs de gcc au link

Discussions similaires

  1. GCC : problème de librairies...
    Par Pico10 dans le forum Autres éditeurs
    Réponses: 10
    Dernier message: 11/07/2007, 22h05
  2. Problème avec librairie iostream.h
    Par Rafoo dans le forum MFC
    Réponses: 3
    Dernier message: 22/07/2005, 13h20
  3. problèmes de librairies jpeg
    Par ketchupi dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 20/07/2005, 08h57
  4. [Delphi 2005] : Problème de librairies.....
    Par babyface dans le forum Composants VCL
    Réponses: 1
    Dernier message: 07/07/2005, 14h15
  5. problème de librairies...
    Par Mickey34 dans le forum Réseau
    Réponses: 12
    Dernier message: 22/08/2003, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo