Salut,
Ca fait des heures que je suis en train de me prendre la tete sur un probleme de compilation...
En fait j'essaie de nettoyer un programme en le mettant sous forme de classes, et notamment en transformant un .hh en (.h + .cxx).
Voila mon Makefile (copie ailleurs, j'y pige pas grand'chose...) :
Code :
- MYOS := $(subst -,,$(shell uname))
- ROOTCFLAGS = $(shell root-config --cflags)
- ROOTLIBS = $(shell root-config --libs)
- ROOTGLIBS = $(shell root-config --glibs)
- CXXFLAGS = -O2 -fPIC
- CXXFLAGS += $(ROOTCFLAGS) -DEXE
- LIBS += $(ROOTLIBS) -lMinuit
- GLIBS += $(ROOTGLIBS)
- MYOSO := $(OSNAME)
- OBJECTDIR= $(MYOSO).o
- all: fitARS
- $(OBJECTDIR)/%.d : %.C
- -@if [ ! -d $(MYOSO).o ] ; then mkdir $(MYOSO).o; fi
- @ touch $@.tmp
- @ echo "Making dependencies for $<"
- @ g++ -MM $(CXXFLAGS) -I/usr/include/g++-2/ $< > $@.tmp
- @ sed 's=$(*F)\.o=$(MYOSO).o/$(*F).o=g' $@.tmp > $@.tmp1
- @ sed 's=$(*F)\.C.o=$(MYOSO).o/$(*F).o=g' $@.tmp1 > $@
- @ $(RM) $@.tmp $@.tmp1 $@.tmp.bak
- $(OBJECTDIR)/%.d : %.cxx
- -@if [ ! -d $(MYOSO).o ] ; then mkdir $(MYOSO).o; fi
- @ touch $@.tmp
- @ echo "Making dependencies for $<"
- @ g++ -MM $(CXXFLAGS) -I/usr/include/g++-2/ $< > $@.tmp
- @ sed 's=$(*F)\.o=$(MYOSO).o/$(*F).o=g' $@.tmp > $@.tmp1
- @ sed 's=$(*F)\.C.o=$(MYOSO).o/$(*F).o=g' $@.tmp1 > $@
- @ $(RM) $@.tmp $@.tmp1 $@.tmp.bak
- $(OBJECTDIR)/%.d : %.cpp
- -@if [ ! -d $(MYOSO).o ] ; then mkdir $(MYOSO).o; fi
- @ touch $@.tmp
- @ echo "Making dependencies for $<"
- @ g++ -MM $(CXXFLAGS) -I/usr/include/g++-2/ $< > $@.tmp
- @ sed 's=$(*F)\.o=$(MYOSO).o/$(*F).o=g' $@.tmp > $@.tmp1
- @ sed 's=$(*F)\.C.o=$(MYOSO).o/$(*F).o=g' $@.tmp1 > $@
- @ $(RM) $@.tmp $@.tmp1 $@.tmp.bak
- $(OBJECTDIR)/%.o : %.C
- $(CXX) -c $(CXXFLAGS) -o $@ $<
- $(OBJECTDIR)/%.o : %.cxx
- $(CXX) -c $(CXXFLAGS) -o $@ $<
- $(OBJECTDIR)/%.o : %.cpp
- $(CXX) -c $(CXXFLAGS) -o $@ $<
- -include .$(MYOSO).o.d
- .$(MYOSO).o.d :
- -@if [ ! -d $(MYOSO).o ] ; then mkdir $(MYOSO).o; echo "Making directory $(MYOSO).o"; fi
- MonProgObj = $(OBJECTDIR)/MaClasse1.o $(OBJECTDIR)/MaClasse2.o [...] $(OBJECTDIR)/MonProg.o
- MonProg: $(MonProgObj)
- $(CXX) $(CXXFLAGS) -o $@ $(MonProgObj) $(LIBS)
- -include $(OBJECTDIR)/MonProg.d $(OBJECTDIR)/MaClasse1.d $(OBJECTDIR)/MaClasse2.d [...]
- clean:
- @rm -rf MonProg $(OBJECTDIR)/ core.* *.o
|
J'ai bien des #ifndef MACLASSE1 #define MACLASSE1 [...] #endif dans toutes mes classes, ce Makefile fonctionne farpaitement avec d'autres progs, et pourtant ici j'ai des erreurs de compilation du type :
Citation :
Linux.o/MonProg.o(.text+0x0): In function `fonction1(double*)':
: multiple definition of `fonction1(double*)'
Linux.o/MaClasse1.o(.text+0x0): first defined here
|
Les fonctions viennent toutes du meme fichier MonBug.h, qui est appele une seule fois, par un #include dans le fichier MaClasse.h.
Je vois vraiment pas d'ou peut venir le probleme, donc si quelqu'un avait ne serait-ce qu'un debut de piste a me proposer... Merci d'avance.
EDIT : Ca peut peut-etre aider, les messages de compilation (et je travaille sous linux avec g++ et ROOT) :
Citation :
Making dependencies for MaClasse1.cxx
Making dependencies for MaClasse2.cxx
[...]
Making dependencies for MonProg.C
g++ -c -O2 -fPIC -pthread -I/apps/root/5.08-00-gcc3.2.3/root/include -DEXE -o Linux.o/MaClasse1.o MaClasse1.cxx
g++ -c -O2 -fPIC -pthread -I/apps/root/5.08-00-gcc3.2.3/root/include -DEXE -o Linux.o/MaClasse2.o MaClasse2.cxx
[...]
g++ -c -O2 -fPIC -pthread -I/apps/root/5.08-00-gcc3.2.3/root/include -DEXE -o Linux.o/MonProg.o MonProg.C
g++ -O2 -fPIC -pthread -I/apps/root/5.08-00-gcc3.2.3/root/include -DEXE -o MonProg Linux.o/MaClasse1.o Linux.o/MaClasse2.o [...] Linux.o/MonProg.o -L/apps/root/5.08-00-gcc3.2.3/root/lib -lCore -lCint -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -pthread -lm -ldl -rdynamic -lMinuit
|
EDIT2 : Le probleme ne doit pas venir d'une declaration de fonctions avec le meme nom dans une lib de ROOT car je n'ai pas de probleme de compilation avec le .hh (compilation pour laquelle le Makefile a une forme un peu differente).
Message édité par SkippyleGrandGourou le 26-08-2006 à 22:56:13