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 :

Aide pour makefile


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Par défaut Aide pour makefile
    Bonjour
    Sous linux sur une application SDL, je cherche à écrire le makefile.
    L'arborescence du projet est :
    - projet/SDL/include/SDL/tous les header sdl.h ...
    - projet/SDL/lib/libSDL.a libSDL.so
    - projet/mes fichiers sources *.cpp *.h

    La lib SDL n'a pas installé dans /usr/lib ou /usr/local/lib ...
    Je veux linker la lib SDL à mon projet à partir de projet/SDL

    Dans mes fichiers source, j'appele la SDL avec #include <SDL/SDL.h>

    voila mon makefile : (pb : ne trouve pas les header de la sdl et probablement pas la lib)
    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
    #Makefile
    TARGET	= SDLGLapp
    SDLDIR	= SDL
     
    INCLUDES = \
    	-I$(SDLDIR)/include
     
    LIBDIRS = \
    	-L$(SDLDIR)/lib
     
    LIBS	= -lSDL -lSDL_image -lGL -lGLU
     
    CXXSOURCES =	main.cpp \
    	fonction.cpp
     
    CXXOBJECTS = $(CXXSOURCES:.cpp=.o)
     
    CXXFLAGS = -fPIC -Wall 
    CXX = g++
    LDFLAGS = $(LIBDIRS) $(LIBS)
     
     
    all: $(TARGET)
     
    $(TARGET) : $(CXXOBJECTS)
    	$(CXX) -o $@ $^ $(LDFLAGS)
     
    %.o: %.cpp
    	$(CXX) $(CXXFLAGS) $(INCLUDES) -o $@ -c $<
     
    clean:
    	$(RM) -rf $(CXXOBJECTS)
    mrproper: clean
    	rm -rf $(TARGET)
     
    run:
    	./$(TARGET)
    si quelqu'un peut m'aider?
    merci

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Salut

    A priori si tu ne t'es pas trompé dans la description tu as ça devrait marcher, même si je n'aurais pas fait comme ça.

    Je n'aime pas trop ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TARGET	= SDLGLapp
    SDLDIR	= SDL
    surtout suivi par
    ce qui donne -ISDL/include perso je préfère arriver à ce résultat : -I./SDL/include

    Donc ajoute des ./ pour bien signifier que c'est à partir du répertoire courant.
    Bien sûre j'ai considéré que le makefile est dans projet/.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Par défaut
    Merci pour les conseils

    j'ai changé mon makefile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INCLUDES = \
    	-I./SDL/include
     
    LIBDIRS = \
    	-L./SDL/lib
    J'arrive à compiler => j'ai tout mes .o sans problème mais problème à l'édition des liens.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ make
    g++ -fPIC -Wall -I./SDL/include -o main.o -c main.cpp
    g++ -fPIC -Wall -I./SDL/include -o fonction.o -c fonction.cpp
    g++ -o SDLGLapp main.o fonction.o -L./SDL/lib -lGL -lGLU -lSDL -lSDL_image
    /usr/bin/ld:./SDL/lib/libSDL.so: file format not recognized; treating as
    linker script
    /usr/bin/ld:./SDL/lib/libSDL.so:1: syntax error
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [SDLGLapp] Erreur 1
    dans ./projet/SDL/lib/ j'ai :
    libSDL.a
    libSDLmain.a
    libSDL.la
    libSDL.so
    libSDL_image.a
    libSDL_image.la
    libSDL_image.so

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Par défaut
    problème résolu en prenant les libs dans un autre package

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Par défaut
    Salut,

    Juste une petite remarque qui n'a rien à voir avec le problème initial :
    tu devrais éviter d'utiliser l'option -fPIC lorsque ton but est de créer un exécutable car ça n'appporte rien et ça peut même avoir un impact négatif sur les performances de ton programme.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Par défaut
    RE : je sollicite encore votre aide sur ce sujet

    bon donc mon programme compile sans problème avec ce makefile
    mais quand je l'exécute, il ne trouve pas les librairies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error while loading shared libraires : libSDL_image-1.2.so.0 :
     cannot open shared objet file : no such file directory
    bon j'ai essayé de mettre la lib a coté de l'exécutable mais sans succès?

  7. #7
    screetch
    Invité(e)
    Par défaut
    -Wl,-rpath permet de spécifier ou sera la lib, sinon elle est recherchée dans des endroits par défaut (/usr/lib, /usr/local/lib, /opt/lib etc etc)
    je pense que tu devrais ajouter pour le développement, -Wl,-rpath,. (cherche la lib dans le repertoire courant) et pour une version installée de ton prgramme, -Wl,-rpath,$(BINPREFIX) ou binprefix contient l'endroit ou sera la bibliothèque

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Par défaut
    merci pour ta réponse,
    j'ai essayé d'utiliser les options -Wl -rpath sans succès. T'aurais un exemple?

    sinon en rajoutant mon répertoire lib à LD LIBRARY PATH ça fonctionne mais c'est pas très pratique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OCaml] Besoin d'aide pour un makefile
    Par GyZmoO dans le forum Caml
    Réponses: 4
    Dernier message: 23/01/2007, 21h38
  2. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  3. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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