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

Autres éditeurs Discussion :

[Débutant] problème compilation


Sujet :

Autres éditeurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Par défaut [Débutant] problème compilation
    Salut à tous.


    Je développe des programmen en C++ sur Solaris (SUN).
    J'utilise aussi une librairie d'ILOG CPLEX qui permet d'implémenter et résoudre des problèmes d'équations linéaires.
    J'ai créer des classes "Noeud", "LienPhys" et "PHI" sachant qu' un Objet LienPhys possède 2 Noeud.

    Dans mon programe principal "Exo15.cpp" je fais:

    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
     
    #include "Noeud.h"
    #include "LienPhys.h"
    #include "PHI.h"  
     
    int main(int argc, char **argv)
    {
    ...
     
      std::vector <Noeud> Vect_N;
      std::vector <LienPhys> Vect_L;
         //Construction du vecteur de Noeud
         for (int i = 0; i < n; i++) 
         {
            //Création dez Noeuds
       Noeud N_Obj(i, 0, 0, env);
       Vect_N.push_back(N_Obj);
         }
     
     
      //Affichage de tous les Noeuds
      for (int i = 0; i < n; i++) 
         {
       Vect_N[i].afficher();
      }
      LienPhys li(0,200,Noeud(Vect_N[1]),Noeud(Vect_N[2]),env);
    ...
     
    }
    Mais quand je compile en lançant le 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
    #Makefile
    SYSTEM     = ultrasparc32_8_6.2
    LIBFORMAT  = static_pic_mt
    CPLEXDIR      = /local/cplex91
    CONCERTDIR    = /local/concert21
    REP = /users/rss/eclu8410
    CCC = /soft/WorkShop_6.0/SUNWspro/bin/CC
    CCOPT = -O -xtarget=ultra -xarch=v8plus -DNDEBUG -pto -PIC -DIL_STD
    CPLEXLIBDIR   = $(CPLEXDIR)/lib/$(SYSTEM)/$(LIBFORMAT)
    CONCERTLIBDIR = $(CONCERTDIR)/lib/$(SYSTEM)/$(LIBFORMAT)
    CCLNFLAGS = -L$(CPLEXLIBDIR) -lilocplex -lcplex -L$(CONCERTLIBDIR) -lconcert -mt -lm -lsocket -lnsl
    all:
     make all_cpp
    CONCERTINCDIR = $(CONCERTDIR)/include
    CPLEXINCDIR   = $(CPLEXDIR)/include
    CCFLAGS = $(CCOPT) -I$(CPLEXINCDIR) -I$(CONCERTINCDIR) -I$(REP)
    CPP_EX =  Noeud.o LienPhys.o PHI.o Exo15.o MonExecutable 
     
    all_cpp: $(CPP_EX)
    OBJCPP = $(REP)/Exo15.o $(REP)/PHI.o $(REP)/LienPhys.o $(REP)/Noeud.o
     
    # ------------------------------------------------------------
    #Création de l'exécutable
    MonExecutable: $(OBJCPP)
     $(CCC) $(CCFLAGS) $(REP)/Exo15.o -o $(REP)/MonExe $(CCLNFLAGS)  
     
    # Création des différents *.o à partir des *.cpp
    Exo15.o:$(REP)/Exo15.cpp $(REP)/PHI.cpp $(REP)/PHI.h $(REP)/LienPhys.cpp $(REP)/LienPhys.h $(REP)/Noeud.cpp $(REP)/Noeud.h 
     $(CCC) -c $(CCFLAGS) $(REP)/Exo15.cpp -o Exo15.o
     
    PHI.o: $(REP)/PHI.cpp $(REP)/PHI.h $(REP)/Noeud.cpp $(REP)/Noeud.h    
     $(CCC) -c $(CCFLAGS) $(REP)/PHI.cpp -o PHI.o
     
    LienPhys.o: $(REP)/LienPhys.cpp $(REP)/LienPhys.h $(REP)/Noeud.cpp $(REP)/Noeud.h   
     $(CCC) -c $(CCFLAGS) $(REP)/LienPhys.cpp -o LienPhys.o
     
    Noeud.o: $(REP)/Noeud.cpp $(REP)/Noeud.h     
     $(CCC) -c $(CCFLAGS) $(REP)/Noeud.cpp -o Noeud.o
    j'obtiens des erreurs:
    /soft/WorkShop_6.0/SUNWspro/bin/CC -c -O -xtarget=ultra -xarch=v8plus -DNDEBUG -pto -PIC -DIL_STD -I/local/cplex91/include -I/local/concert21/include -I/users/rss/eclu8410 /users/rss/eclu8410/Exo15.cpp -o Exo15.o
    /soft/WorkShop_6.0/SUNWspro/bin/CC -O -xtarget=ultra -xarch=v8plus -DNDEBUG -pto -PIC -DIL_STD -I/local/cplex91/include -I/local/concert21/include -I/users/rss/eclu8410 /users/rss/eclu8410/Exo15.o -o /users/rss/eclu8410/MonExe -L/local/cplex91/lib/ultrasparc32_8_6.2/static_pic_mt -lilocplex -lcplex -L/local/concert21/lib/ultrasparc32_8_6.2/static_pic_mt -lconcert -mt -lm -lsocket -lnsl
    Undefined first referenced
    symbol in file
    Noeud::Noeud(int,int,bool,IloEnv) /users/rss/eclu8410/Exo15.o
    LienPhys::LienPhys(int,int,Noeud,Noeud,IloEnv) /users/rss/eclu8410/Exo15.o
    void Noeud::afficher() /users/rss/eclu8410/Exo15.o
    Noeud::Noeud(const Noeud&) /users/rss/eclu8410/Exo15.o
    ld: fatal: Symbol referencing errors. No output written to /users/rss/eclu8410/MonExe
    *** Error code 1
    make: Fatal error: Command failed for target `MonExecutable'
    Current working directory /users/rss/eclu8410
    *** Error code 1
    make: Fatal error: Command failed for target `all'
    Par contre si je modifie mon programme en faisant:
    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
     #include "Noeud.h"
    #include "Noeud.cpp"
    #include "LienPhys.h"
    #include "LienPhys.cpp"
    #include "PHI.h"  
    #include "PHI.cpp"  
     
    int main(int argc, char **argv)
    {
    ...
     
      std::vector <Noeud> Vect_N;
      std::vector <LienPhys> Vect_L;
         //Construction du vecteur de Noeud
         for (int i = 0; i < n; i++) 
         {
            //Création dez Noeuds
       Noeud N_Obj(i, 0, 0, env);
       Vect_N.push_back(N_Obj);
         }
     
     
      //Affichage de tous les Noeuds
      for (int i = 0; i < n; i++) 
         {
       Vect_N[i].afficher();
      }
      LienPhys li(0,200,Noeud(Vect_N[1]),Noeud(Vect_N[2]),env);
    ...
     
    }
    Tout compile correctement !!

    Je pense qu'il manque quelquechose dans mon Makefile.

    Quelqu'un peut m'éclairer car je suis pas très fort en Makefile et j'aimerai bien comprendre.

  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
    En fait tu as besoin de tous les objects (.o) pour construire ton executable (parce que les "méthodes"/fonction de chaque object (Noeud....) sont définis dans leur propre .o ).
    Donc le Makefile doit plutot etre comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # ------------------------------------------------------------
    #Création de l'exécutable
    MonExecutable: $(OBJCPP)
     $(CCC) $(CCFLAGS) $(OBJCPP) -o $(REP)/MonExe $(CCLNFLAGS)  
     
    # Création des différents *.o à partir des *.cpp
    Exo15.o:$(REP)/Exo15.cpp $(REP)/Noeud.h $(REP)/LienPhys.h $(REP)/PHI.h
     $(CCC) -c $(CCFLAGS) $(REP)/Exo15.cpp -o Exo15.o
    Rq: ton Exo15.o ne dépend que du .cpp et des differents headers qu'il inclus.


    Rq: quand tu modifie ton .cpp et en incluant les .cpp (tu mets tout le code (et donc toutes les méthodes) dans un seul object Exo15.o qui peut alors etre "linké" en executable.


    Rq: c'est pareil en C, tu remplace méthode par "fonction".

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 31
    Par défaut
    Merci D[r]eadLock.

    Tu avais raison, J'ai donc modifier 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
     
    SYSTEM     = ultrasparc32_8_6.2
    LIBFORMAT  = static_pic_mt
    CPLEXDIR      = /local/cplex91
    CONCERTDIR    = /local/concert21
    REP = /users/rss/eclu8410
    CCC = /soft/WorkShop_6.0/SUNWspro/bin/CC
    CCOPT = -O -xtarget=ultra -xarch=v8plus -DNDEBUG -pto -PIC -DIL_STD
    CPLEXLIBDIR   = $(CPLEXDIR)/lib/$(SYSTEM)/$(LIBFORMAT)
    CONCERTLIBDIR = $(CONCERTDIR)/lib/$(SYSTEM)/$(LIBFORMAT)
    CCLNFLAGS = -L$(CPLEXLIBDIR) -lilocplex -lcplex -L$(CONCERTLIBDIR) -lconcert -mt -lm -lsocket -lnsl
    all:
     make all_cpp
    CONCERTINCDIR = $(CONCERTDIR)/include
    CPLEXINCDIR   = $(CPLEXDIR)/include
    CCFLAGS = $(CCOPT) -I$(CPLEXINCDIR) -I$(CONCERTINCDIR) -I$(REP)
    CPP_EX =  Noeud.o LienPhys.o PHI.o Exo15.o Exo15 
     
    all_cpp: $(CPP_EX)
    OBJCPP = $(REP)/Exo15.o $(REP)/PHI.o $(REP)/LienPhys.o $(REP)/Noeud.o
     
    # ------------------------------------------------------------
    #Création de l'exécutable
    Exo15: $(OBJCPP)
     $(CCC) $(CCFLAGS) $(OBJCPP) -o $(REP)/Exo15 $(CCLNFLAGS)  
    # Création des différents *.o à partir des *.cpp
    Exo15.o:$(REP)/Exo15.cpp $(REP)/PHI.h $(REP)/LienPhys.h $(REP)/Noeud.h 
     $(CCC) -c $(CCFLAGS) $(REP)/Exo15.cpp -o Exo15.o
    PHI.o: $(REP)/PHI.cpp $(REP)/PHI.h $(REP)/Noeud.h    
     $(CCC) -c $(CCFLAGS) $(REP)/PHI.cpp -o PHI.o
    LienPhys.o: $(REP)/LienPhys.cpp $(REP)/LienPhys.h $(REP)/Noeud.h   
     $(CCC) -c $(CCFLAGS) $(REP)/LienPhys.cpp -o LienPhys.o
    Noeud.o: $(REP)/Noeud.cpp $(REP)/Noeud.h     
     $(CCC) -c $(CCFLAGS) $(REP)/Noeud.cpp -o Noeud.o
    en suivant tes remarques.

    Cool cela compile bien maintenant en incluant juste mes Headers (.h)

    Merci à toi.

    @+.

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

Discussions similaires

  1. Débutant : Problème de compilation ou d'exécution
    Par infolove dans le forum Général Java
    Réponses: 14
    Dernier message: 29/01/2008, 22h08
  2. Débutant sous C (problème compilation)
    Par DevloNewb' dans le forum C
    Réponses: 6
    Dernier message: 18/06/2006, 14h59
  3. [débutant] problème de compilation
    Par shinkyo dans le forum GLUT
    Réponses: 4
    Dernier message: 21/05/2006, 15h18
  4. [débutant] problème de compilation
    Par LaseLiep dans le forum C
    Réponses: 12
    Dernier message: 16/12/2005, 20h40
  5. Réponses: 7
    Dernier message: 27/09/2005, 21h40

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