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.