problème avec les librairies dynamiques*.so sous linux

pheapcpheapc Membre
mai 2013 modifié dans API AppKit #1

bonjour
je m'excuse si ma question vous dérange
je travaille sur un code développer en c++ qui bien marché sur mac os ,ce code va permettre de crée des librairies *.so à  partir des *.cc et *.h j'ai utilisé pour cela comme flags:CXXFLAGS = -g -O2 -fPIC -Wall -ldl -D_GNU_SOURCE ,CXX := g++ et $(CXX)-shared -o $(LIBNAME) $(CLIBLIB) $(OUT_OBJS) cette étape est bien passé j'ai obtenu les *.so comme suit :
morad@linux-nzlc:~/Musique/workdir> ls library/tklibs/lib/
libAnalyticalJacobians.so libDetGeometry.so libGeomPropagators.so libPatternTestTools.so libSmearingClusterizers.so libTkLayout.so
libBaseMagneticField.so libDetLayout.so libKalmanUpdators.so libPatternTools.so libStatUtilities.so libTkNavigation.so
libBasicDet.so libDetUtilities.so libMaterialEffects.so libPropagators.so libSurfaceGeometry.so libTrackFitters.so
libBasicStripDet.so libDetVolumeGeometry.so libNumericalJacobians.so libRKPropagators.so libTkCommonDet.so libTrajectoryParametrization.so
libCommonStripDet.so libGenUtil.so libPatternPrimitives.so libSiPixelDet.so libTkFastSimHit.so libUI.so
morad@linux-nzlc:~/Musique/workdir> ./libScript.py
ensuite la deuxième étape je voudrais crée l'exécutable pour cela j'ai spécifie les -I,-L et -l dans le makfile j'ai comme une flags :CXX = g++ et $(CXX) -O2 -g -fopenmp $(CILIBLAY) $(OUT_OBJS) $(OBJDIR)/$(MAIN_PROG).o -o $(MAIN_PROG).exe mais avec ça après l'exécution j'obtiens une erreur :
***************************************

morad@linux-nzlc:~/Musique/workdir/layout/analyze> make mainP=runAnalyze

Makefile:85: /home/morad/Musique/workdir/layout/build/analyze/myAnalyze.d: Aucun fichier ou dossier de ce type

g++ -MM -I/cern/CLHEP/2.0.4.5/include/ -I/home/morad/Musique/workdir/layout -I/home/morad/Musique/workdir/library/tklibs -I/cern/ROOT/source/root/include -I/usr/include/freetype2/freetype/ -I/usr/include/freetype2 -I/cern/Minuit2/5.28.00/include -I/usr/include/libxml2 -I/usr/include/libxml++-2.6 -I/usr/lib/libxml++-2.6/include/ -I/usr/include/glibmm-2.4/ -I/usr/lib/glibmm-2.4/include/ -I/usr/include/sigc++-2.0/ -I/usr/lib/sigc++-2.0/include/ -I/usr/include/glib-2.0/ -I/usr/lib/glib-2.0/include/ -I/cern/gettext/0.18.2/include/ myAnalyze.cc > /home/morad/Musique/workdir/layout/build/analyze/myAnalyze.d.$$; \

sed 's,\(myAnalyze\)\.o[ :]*,\1.o /home/morad/Musique/workdir/layout/build/analyze/myAnalyze.d : ,g' < /home/morad/Musique/workdir/layout/build/analyze/myAnalyze.d.$$ > /home/morad/Musique/workdir/layout/build/analyze/myAnalyze.d; \

rm -f /home/morad/Musique/workdir/layout/build/analyze/myAnalyze.d.$$

g++ -c -I/cern/CLHEP/2.0.4.5/include/ -I/home/morad/Musique/workdir/layout -I/home/morad/Musique/workdir/library/tklibs -I/cern/ROOT/source/root/include -I/usr/include/freetype2/freetype/ -I/usr/include/freetype2 -I/cern/Minuit2/5.28.00/include -I/usr/include/libxml2 -I/usr/include/libxml++-2.6 -I/usr/lib/libxml++-2.6/include/ -I/usr/include/glibmm-2.4/ -I/usr/lib/glibmm-2.4/include/ -I/usr/include/sigc++-2.0/ -I/usr/lib/sigc++-2.0/include/ -I/usr/include/glib-2.0/ -I/usr/lib/glib-2.0/include/ -I/cern/gettext/0.18.2/include/ myAnalyze.cc -o /home/morad/Musique/workdir/layout/build/analyze/myAnalyze.o 

g++ -c -I/cern/CLHEP/2.0.4.5/include/ -I/home/morad/Musique/workdir/layout -I/home/morad/Musique/workdir/library/tklibs -I/cern/ROOT/source/root/include -I/usr/include/freetype2/freetype/ -I/usr/include/freetype2 -I/cern/Minuit2/5.28.00/include -I/usr/include/libxml2 -I/usr/include/libxml++-2.6 -I/usr/lib/libxml++-2.6/include/ -I/usr/include/glibmm-2.4/ -I/usr/lib/glibmm-2.4/include/ -I/usr/include/sigc++-2.0/ -I/usr/lib/sigc++-2.0/include/ -I/usr/include/glib-2.0/ -I/usr/lib/glib-2.0/include/ -I/cern/gettext/0.18.2/include/ runAnalyze.cxx -o /home/morad/Musique/workdir/layout/build/analyze/runAnalyze.o

g++ -O2 -g -fopenmp -L/home/morad/Musique/workdir/library/tklibs/lib -L/home/morad/Musique/workdir/layout/lib -lxmlgeom -ltrack -lcross -lMaterialEffects -lPropagators -ltracking -lgeom -lStatUtilities -lAnalyticalJacobians -ltkhist -lxmltkgeom -lutils -lopt -ldraw -lanalyze -L/usr/lib -lGeomPropagators -lPatternPrimitives -lSurfaceGeometry -lBaseMagneticField -lUI -lGenUtil -lSiPixelDet -lSmearingClusterizers -lBasicDet -lTrackFitters -lTkFastSimHit -lCommonStripDet -lDetLayout -lTkLayout -lDetGeometry -lKalmanUpdators -lTkCommonDet -lPatternTools -lTrajectoryParametrization -lBasicStripDet -lDetUtilities -lDetVolumeGeometry -lPatternTestTools -lRKPropagators -lTkNavigation -lNumericalJacobians -lxml++-2.6 -lxml2 -lglibmm-2.4 -lgobject-2.0 -lsigc-2.0 -lglib-2.0 -L/cern/ROOT/source/root/lib -L/cern/Minuit2/5.28.00/lib -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lfreetype -lz /usr/lib/libbz2.so.1.0.6 -lpthread -lm -ldl -lMinuit2 -L/cern/CLHEP/2.0.4.5/lib/ -lCLHEP-2.0.4.5 /usr/lib/libstdc++.so.6 /home/morad/Musique/workdir/layout/build/analyze/myAnalyze.o /home/morad/Musique/workdir/layout/build/analyze/runAnalyze.o -o runAnalyze.exe

/home/morad/Musique/workdir/library/tklibs/lib/libSmearingClusterizers.so: undefined reference to `TrivialROUSetter::set(Module)'

/home/morad/Musique/workdir/library/tklibs/lib/libTkLayout.so: undefined reference to `FixTIDTopology::recreateTopologies()'

/home/morad/Musique/workdir/library/tklibs/lib/libSmearingClusterizers.so: undefined reference to `TkDetTypeName::shortName(DetType const&)'

/home/morad/Musique/workdir/library/tklibs/lib/libTkLayout.so: undefined reference to `DetUnitGluer::glue(__gnu_cxx::__normal_iterator<D etUnit**, std::vector<DetUnit*, std::allocator<DetUnit*> > >, __gnu_cxx::__normal_iterator<DetUnit**, std::vector<DetUnit*, std::allocator<DetUnit*> > >, __gnu_cxx::__normal_iterator<DetUnit**, std::vector<DetUnit*, std::allocator<DetUnit*> > >, __gnu_cxx::__normal_iterator<DetUnit**, std::vector<DetUnit*, std::allocator<DetUnit*> > >)'

/home/morad/Musique/workdir/library/tklibs/lib/libTkFastSimHit.so: undefined reference to `RawHepEventFactoryFromGun::RawHepEventFactoryFrom Gun()'

/home/morad/Musique/workdir/library/tklibs/lib/libTkLayout.so: undefined reference to `toa:redface.gifperator()(int const&) const'

/home/morad/Musique/workdir/library/tklibs/lib/libTkLayout.so: undefined reference to `FixTIDTopology::FixTIDTopology()'

/home/morad/Musique/workdir/library/tklibs/lib/libTkLayout.so: undefined reference to `DetBlade:biggrin.gifetBlade(__gnu_cxx::__normal_iterator<D et* const*, std::vector<Det*, std::allocator<Det*> > >, __gnu_cxx::__normal_iterator<Det* const*, std::vector<Det*, std::allocator<Det*> > >)'

/home/morad/Musique/workdir/library/tklibs/lib/libTkLayout.so: undefined reference to `toa::~toa()'

/home/morad/Musique/workdir/library/tklibs/lib/libTkLayout.so: undefined reference to `FullTracker::instance()'

collect2: erreur: ld a retourné 1 code d'état d'exécution

make: *** [runAnalyze] Erreur 1

morad@linux-nzlc:~/Musique/workdir/layout/analyze> 
*****************************************
ce qui non défini dans *.so par exemple TrivialROUSetter est seulement déclaré dans un fichier .h il est n'est pas défini dans .cc j'ai l'intuition que le compilateur g++ pour l'opensuse a besoin d'une flags pour n'est chercher les définitions des includes *.h que s'il est necessaire contrairement au g++ pour mac-os
merci d'avance


Mots clés:

Réponses

  • CéroceCéroce Membre, Modérateur

    Ton message a tout a fait sa place sur ce forum, mais pas dans la section iOS, alors je l'ai déplacé.


  • yoannyoann Membre

    Le message à  peut être sa place, mais un passage par la case présentation et une mise en forme correcte serait pas du luxe...


     


    Il n'y a même pas un saut de ligne !!!


  • CéroceCéroce Membre, Modérateur
    mai 2013 modifié #4

    Pour ce qui est de ta question, on ne peut sûrement pas y répondre sans voir le makefile et y passer beaucoup trop de temps.


     


    Mais voici quand même des indications utiles:


    1) Sous OS X, les .so sont des .dylib. J'ignore quelle est l'incidence si une bibliothèque dynamique s'appelle .so, mais ça compromet sans doute sa recherche par le système d'exploitation.


    2) Les .dylib possèdent une propriété INSTALL_PATH ou LOADER_PATH, on trouve des infos sur le net ou ici dans de vieux messages. C'est important, parce qu'OS X va chercher la .dylib à  des endroits bien précis.


     



     


    j'ai l'intuition que le compilateur g++ pour l'opensuse a besoin d'une flags pour n'est chercher les définitions des includes *.h que s'il est necessaire contrairement au g++ pour mac-os

     



     


    Non, je ne vois pas pourquoi ce serait différent sous Linux, il faut bien à  un moment ou un autre dire où se trouvent les fichiers includes, ne serait-ce que pour qu'il prenne les bons.


     


    Enfin, bon courage! N'hésite pas à  utiliser otool et nm pour savoir ce que tu as compiler et si les INSTALL_PATH sont ceux attendus.


  • pheapcpheapc Membre
    mai 2013 modifié #5

     merci pour cette motivation voila mon makfile pour generer l'excutable


     


     


    # this Makefile compiles all the *.cc files in the current directory

    # It generates the dependencies automatically, following the example at

    # info:/make/Automatic Prerequisites

    # names of cc files without suffixe

    #

    # The Prerequisites and object files will be writen in objfiles

    #

    OBJDIR := /home/morad/Musique/workdir/layout/build/analyze

    sources := $(wildcard *.cc)

    BASENAMES_FILES = $(basename $(sources)) 

    objfiles = $(addsuffix .d,$(BASENAMES_FILES))

    OUT_OBJS = $(addprefix $(OBJDIR)/,$(objfiles))

    objfiles := $(addsuffix .o,$(BASENAMES_FILES))

    OUT_OBJS := $(addprefix $(OBJDIR)/,$(objfiles))

    # include and libs paths paths 

    CLHEPDIR_INC  := -I/cern/CLHEP/2.0.4.5/include/

    CLHEPDIR_LIB  := -L/cern/CLHEP/2.0.4.5/lib/

    CLHEPDIR_LIBS := -lCLHEP-2.0.4.5

    LOCALINC      := -I/home/morad/Musique/workdir/layout -I/home/morad/Musique/workdir/library/tklibs 

    ALPINEDIR_INC := -I/home/morad/Musique/workdir/library/tklibs

    ALPINEDIR_LIB := -L/home/morad/Musique/workdir/library/tklibs/lib -L/home/morad/Musique/workdir/layout/lib  -lxmlgeom -ltrack -lcross -lMaterialEffects -lPropagators -ltracking -lgeom -lStatUtilities -lAnalyticalJacobians -ltkhist -lxmltkgeom -lutils -lopt -ldraw -lanalyze

    ALPINEDIR_LIBS:= -lTkLayout -lDetGeometry -lKalmanUpdators  -lDetVolumeGeometry -lPatternTestTools -lRKPropagators -lTkCommonDet -lPatternTools -lTrajectoryParametrization -lBasicStripDet -lDetUtilities -lBasicDet -lGeomPropagators -lPatternPrimitives -lSurfaceGeometry -lBaseMagneticField -lUI -lGenUtil -lSiPixelDet -lSmearingClusterizers -lTrackFitters -lTkFastSimHit -lCommonStripDet -lDetLayout  -lTkNavigation -lNumericalJacobians 

    ROOTDIR_INC   := -I/cern/ROOT/source/root/include  -I/usr/include/freetype2/freetype/  -I/usr/include/freetype2 

    ROOTDIR_LIB   := -L/cern/ROOT/source/root/lib  /usr/lib/libX11.so

    ROOTDIR_LIBS  := -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix\

    -lPhysics -lMathCore -lThread -lfreetype -lz  /usr/lib/libbz2.so.1.0.6  -pthread -Wl,-rpath,/cern/ROOT/source/root/lib -lpthread  -lm -ldl

    XMLDIR_INC    := -I/usr/include/libxml2 -I/usr/include/libxml++-2.6 -I/usr/lib/libxml++-2.6/include/ -I/usr/include/glibmm-2.4/ -I/usr/lib/glibmm-2.4/include/ -I/usr/include/sigc++-2.0/ -I/usr/lib/sigc++-2.0/include/ -I/usr/include/glib-2.0/ -I/usr/lib/glib-2.0/include/ -I/cern/gettext/0.18.2/include/    

    XMLDIR_LIB    := -L/usr/lib

    XMLDIR_LIBS   := -lxml++-2.6 -lxml2 -lglibmm-2.4 -lgobject-2.0 -lsigc-2.0 -lglib-2.0  /usr/lib/preloadable_libintl.so

    MINUITDIR_INC := -I/cern/Minuit2/5.28.00/include

    MINUITDIR_LIB := -L/cern/Minuit2/5.28.00/lib

    MINUITDIR_LIBS := -lMinuit2 


    CILIBLAY = $(ALPINEDIR_LIB)  $(XMLDIR_LIB)  $(ALPINEDIR_LIBS) $(XMLDIR_LIBS) $(ROOTDIR_LIB) $(MINUITDIR_LIB) $(ROOTDIR_LIBS) $(MINUITDIR_LIBS) $(CLHEPDIR_LIB) $(CLHEPDIR_LIBS)  /usr/lib/libstdc++.so.6 /lib/libutil-2.15.so /lib/libSegFault.so

    CINCLAY =  $(CLHEPDIR_INC) $(LOCALINC) $(ROOTDIR_INC) $(MINUITDIR_INC) $(XMLDIR_INC)    

    MAIN_PROG = $(mainP)

    #CXXFLAGS = -g -O2 -fPIC -Wall -D_GNU_SOURCE 

    CXXFLAGS =-m32 

    #-m32 -fPIC -Wall -D_GNU_SOURCE

    CXX = g++ 

    #-D_GNU_SOURCE 

    $(OBJDIR)/%.d: %.cc

    $(CXX) -MM $(CXXFLAGS) $(CINCLAY)  $< > $@.$$$$; \

    sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \

    rm -f $@.$$$$

    #objfiles := $(addsuffix .o,$(BASENAMES_FILES))

    #OUT_OBJS := $(addprefix $(OBJDIR)/,$(objfiles))

    all: $(MAIN_PROG)

     

    $(OBJDIR)/$(MAIN_PROG).o : $(MAIN_PROG).cxx


     

    $(MAIN_PROG) : $(OUT_OBJS) $(OBJDIR)/$(MAIN_PROG).o

    # @echo "---- " $(CILIBLAY)

    $(CXX) -fopenmp  $(CILIBLAY)  $(OUT_OBJS)  $(OBJDIR)/$(MAIN_PROG).o -o $(MAIN_PROG)

    #-undefined dynamic_lookup

    $(OBJDIR)/%.o : %.cc 

    $(CXX) -c -g $(CXXFLAGS) $(CINCLAY)  $< -o $@  

     

    include $(sources:%.cc=$(OBJDIR)/%.d)

     

    clean :

    rm $(OBJDIR)/*.d $(OBJDIR)/*.o $(LIBNAME)

  • HerveHerve Membre

    Cela donne envie de s'y mettre...  


  • Am_MeAm_Me Membre

    Je sais que c'est trop en demander mais faudrait peut etre des commentaires.


     


     




    Cela donne envie de s'y mettre...  




     


    Ouep délicieux


  • pheapcpheapc Membre

    même avec ça le problème est entraà®ne de resoudre


  • Pas bien compris le sens de la phrase 'le problème est entraà®ne de resoudre" mais je suppose que la frappe automatique a encore ...frappé ! Et peut être ton problème est il désormais résolu ?


    Ceci dit tu peux essayer de copier tes librairies dans /usr/local/lib/ c'est un endroit par défaut où j'ai eu à  placer une .dylib parce que ce n'est pas moi qui l'ai compilée et que changer le chemin par défaut d'une librairie est, sinon impossible du moins, pas facile si on ne peut la recompiler soi même.


    /usr/local/lib a déjà  une tripotée de .dylib ou .so et même une palanquée de .a qui ont été installées  à  un moment ou un autre par des logiciels tiers.


     


    Enfin pourquoi n'as tu pas corrigé ce qui provoque la 1 ère ligne de ton log ?



     


    Makefile:85: /home/morad/Musique/workdir/layout/build/analyze/myAnalyze.d: Aucun fichier ou dossier de ce type

     


    Avant d'aller plus loin ...


Connectez-vous ou Inscrivez-vous pour répondre.