[Débutant] problème compilation
Salut à tous. :lol:
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:
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:
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:
Citation:
/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:
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 !! :roll:
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.