Re: missing dictionaries

From: Pasha Murat (murat@cdfsga.fnal.gov)
Date: Thu Dec 10 1998 - 22:03:34 MET


Paul, if your compiled code doesn'thave any references to the symbols defined
in the dictionary, the object module from the dictionary may not be linked in. 
When (in your example #2) you load the library explicitly, you get the correct 
behaviour. Therefore you may 

- either to compile the dictionary into a separate library and to  load it in 
  at run-time using 

	gSystem->Load("your_library");

  from the compiled code 

- or to force linker to link the dictionary by declaring one of the global
  symbols defined in the dictionary as external in your code.

					regards, pasha
--------------------------------------------------------------------------------
Paul M. Eugenio writes:
 > Dear Rooters,
 > 
 > I have been have trouble making root programs for different platforms other
 > than decunix with g++(where the programs now run). At first I thought I was 
 > having problems with the native Sun c++ compiler, but now I experiencing the 
 > same problems using a SGI native c++ compiler.
 > 
 > When I run the program my class dictionaries are not found (see #1 below), 
 > but when I run a macro in root/cint (see #2 below) the dictionaries are found 
 > and the macro run fine. 
 > 
 > I have used the Makefile and the rules for Event found in the test directory. 
 > In addition I have created MyClass LinkDef.hLinkDef.h files modeled after 
 > EventLinkDef.h
 > 
 > 
 > Could I be missing something in the make? I'm lost as to what is wrong. I 
 > believe that I have all the ingredients to add my classes --and it does work 
 > on one platform....
 > 
 > 
 > 
 > 
 >  For completness, I've included my Makefile #3 and make output #4
 > 
 > 
 > 
 > 
 > 
 > ####### #1
 > physgi03f 155% dumpRdt -n2 -iEvent.rdt -L
 > Dumping 2events
 > Opening file Event.rdt for input
 > Warning in <TClass::TClass>: no dictionary for class TMCFastHepParticle is 
 > availbble
 > Warning in <TClass::TClass>: no dictionary for class TMCFastHepEvt is availbble
 > Warning in <TClass::TClass>: no dictionary for class TMCFastTOF is availbble
 > Warning in <TClass::TClass>: no dictionary for class TMCFastOfflineTrack is 
 > availbble
 >  List the Branches in the Tree
 >         hepevt
 >         trace
 >         offtrk
 > 
 > ######## #2
 > CINT/ROOT C/C++ Interpreter version 5.13.78, Oct 22 1998
 > root [0] gSystem.Load("libTMCFast.so");
 > root [1] .class TMCFastHepParticle
 > ===========================================================================
 > class TMCFastHepParticle //Needed by ROOT
 >  size=0x70
 >  (tagnum=361,voffset=-1,isabstract=0,parent=-1,gcomp=0,=~cd=0)
 > List of base class--------------------------------------------------------
 > 0x0        public: TObject //Basic ROOT object
 > List of member variable---------------------------------------------------
 > Defined in TMCFastHepParticle
 > 0x0        private: Int_t fisthep //The Particle status
 > 0x0        private: Int_t fidhep //The particle id 
 > 0x0        private: Int_t fjmohep[] //The position of the mother particles 
 > 0x0        private: Int_t fjdahep[] //Position of the first daughter... 
 > 0x0        private: Double_t fphep[] //4-Momentum, mass
 > 0x0        private: Double_t fvhep[] //Vertex information, time 
 > 0x0        private: static TClass* fgIsA
 > List of member function---------------------------------------------------
 > Defined in TMCFastHepParticle
 > filename       line:size busy function type and name
 > (compiled)        0:0    0 public: TMCFastHepParticle TMCFastHepParticle(void);
 > (compiled)        0:0    0 public: TMCFastHepParticle TMCFastHepParticle(heppart_t* part);
 > (compiled)        0:0    0 public: Int_t GetIsthep(void) const;
 > (compiled)        0:0    0 public: Int_t GetIdhep(void) const;
 > (compiled)        0:0    0 public: Int_t GetJmohep(Int_t j) const;
 > -- Press return for more -- (input [number] of lines, Cont,Step,More) 0
 > (compiled)        0:0    0 public: Int_t GetJdahep(Int_t j) const;
 > (compiled)        0:0    0 public: Double_t GetMass(void) const;
 > (compiled)        0:0    0 public: Double_t GetPx(void) const;
 > (compiled)        0:0    0 public: Double_t GetPy(void) const;
 > (compiled)        0:0    0 public: Double_t GetPz(void) const;
 > (compiled)        0:0    0 public: Double_t GetE(void) const;
 > (compiled)        0:0    0 public: Double_t GetVx(void) const;
 > (compiled)        0:0    0 public: Double_t GetVy(void) const;
 > (compiled)        0:0    0 public: Double_t GetVz(void) const;
 > (compiled)        0:0    0 public: Double_t GetVt(void) const;
 > (compiled)        0:0    0 public: void SetIsthep(Int_t n);
 > (compiled)        0:0    0 public: void SetIdhep(Int_t n);
 > (compiled)        0:0    0 public: void SetJmohep(Int_t j,Int_t n);
 > (compiled)        0:0    0 public: void SetJdahep(Int_t j,Int_t n);
 > (compiled)        0:0    0 public: void SetMass(Double_t x);
 > (compiled)        0:0    0 public: void SetPx(Double_t x);
 > (compiled)        0:0    0 public: void SetPy(Double_t x);
 > (compiled)        0:0    0 public: void SetPz(Double_t x);
 > (compiled)        0:0    0 public: void SetE(Double_t x);
 > (compiled)        0:0    0 public: void SetVx(Double_t x);
 > (compiled)        0:0    0 public: void SetVy(Double_t x);
 > (compiled)        0:0    0 public: void SetVz(Double_t x);
 > (compiled)        0:0    0 public: void SetVt(Double_t x);
 > (compiled)        0:0    0 public: void Print(ostream* os);
 > (compiled)        0:0    0 public: void Fill(heppart_t* part);
 > (compiled)        0:0    0 public: const char* DeclFileName(void);
 > (compiled)        0:0    0 public: int DeclFileLine(void);
 > (compiled)        0:0    0 public: const char* ImplFileName(void);
 > (compiled)        0:0    0 public: int ImplFileLine(void);
 > (compiled)        0:0    0 public: Version_t Class_Version(void);
 > (compiled)        0:0    0 public: TClass* Class(void);
 > (compiled)        0:0    0 public: void Dictionary(void);
 > (compiled)        0:0    0 public: virtual TClass* IsA(void) const;
 > (compiled)        0:0    0 public: virtual void ShowMembers(TMemberInspector& insp,char* parent);
 > (compiled)        0:0    0 public: virtual void Streamer(TBuffer& b);
 > (compiled)        0:0    0 public: TMCFastHepParticle TMCFastHepParticle(TMCFastHepParticle&);
 > (compiled)        0:0    0 public: virtual void ~TMCFastHepParticle(void);
 > 
 > 
 > ######### #3
 > #
 > 
 > 
 > ObjSuf        = o
 > SrcSuf        = cxx
 > ExeSuf        =
 > DllSuf        = so
 > MCFASTLIB      = $(TMCFastO)
 > OutPutOpt     = -o
 > 
 > ROOTLIBS      = -L$(ROOTSYS)/lib -lNew -lBase -lCint -lClib -lCont -lFunc \
 >                 -lGraf -lGraf3d -lHist -lHtml -lMatrix -lMeta -lMinuit -lNet \
 >                 -lPostscript -lProof -lTree -lUnix -lZip
 > ROOTGLIBS     = -lGpad -lGui -lGX11 -lX3d
 > 
 > # SGI with GCC
 > CXX           = g++
 > CXXFLAGS      = -fsigned-char -fPIC -I$(ROOTSYS)/include
 > LD            = g++
 > LDFLAGS       = -g -Wl,-u,__builtin_new -Wl,-u,__builtin_delete -Wl,-u,__nw__FUiPv
 > SOFLAGS       = -shared
 > LIBS          = $(ROOTLIBS) -lg++ -lm -ldl
 > GLIBS         = $(ROOTLIBS) $(ROOTGLIBS) -lXpm -lX11 -lg++ -lm -lPW -ldl
 > 
 > 
 > # SGI
 > CXX           = CC  
 > CXXFLAGS      =   -I$(ROOTSYS)/include
 > LD            = CC 
 > LDFLAGS       = -g
 > SOFLAGS       = -shared
 > LIBS          = $(ROOTLIBS) -lm -ldl
 > GLIBS         = $(ROOTLIBS) $(ROOTGLIBS) -lXpm -lX11 -lm -lPW -ldl
 > 
 > 
 > 
 > 
 > # Alpha/OSF with g++
 > #CXX           = g++
 > ##CXXFLAGS      = -O -I$(ROOTSYS)/include
 > #CXXFLAGS      = -O -Wall -fno-rtti -fno-exceptions -fPIC -I$(ROOTSYS)/include -g
 > #LD            = g++
 > #LDFLAGS       = -g
 > #SOFLAGS       = -Wl,-expect_unresolved,* -shared
 > #LIBS          = $(ROOTLIBS) -lg++ -lm
 > #GLIBS         = $(ROOTLIBS) $(ROOTGLIBS) -lXpm -lX11 -lg++ -lm -lPW
 > 
 > 
 > 
 > 
 > #------------------------------------------------------------------------------
 > 
 > TMCFastO        = TMCFastHepEvt.$(ObjSuf) TMCFastTOF.$(ObjSuf) \
 >                    TMCFastOfflineTrack.$(ObjSuf) TMCFastHepParticle.$(ObjSuf) \
 >                 TMCFastHepEvtDict.$(ObjSuf) TMCFastTOFDict.$(ObjSuf) \
 >                 TMCFastOfflineTrackDict.$(ObjSuf) TMCFastHepParticleDict.$(ObjSuf) 
 > 
 > TMCFastS        = TMCFastHepEvt.$(SrcSuf) TMCFastTOF.$(SrcSuf) \
 >                 TMCFastOfflineTrack.$(SrcSuf) TMCFastHepParticle.$(SrcSuf)\
 >                 TMCFastHepEvtDict.$(SrcSuf) TMCFastTOFDict.$(SrcSuf) \
 >                 TMCFastOfflineTrackDict.$(SrcSuf) TMCFastHepParticleDict.$(SrcSuf)
 > 
 > 
 > 
 > MAIN1O    = mcfast2root.$(ObjSuf)
 > MAIN1S    = mcfast2root.$(SrcSuf)
 > 
 > MAIN2O        = dumpRdt.$(ObjSuf)
 > MAIN2S        = dumpRdt.$(SrcSuf)
 > 
 > 
 > 
 > TMCFast         = mcfast2root$(ExeSuf) 
 > TMCFast2         = dumpRdt$(ExeSuf)
 > TMCFastSO       = libTMCFast.$(DllSuf)
 > 
 > 
 > OBJS          = $(TMCFastO) $(MAIN1O) 
 > 
 > PROGRAMS      = $(TMCFast)  $(TMCFast2) 
 > 
 > all:            $(PROGRAMS)
 > 
 > $(TMCFast):       $(TMCFastO) $(MAIN1O)
 >                 $(LD) $(SOFLAGS) $(LDFLAGS) $(TMCFastO) $(OutPutOpt) $(TMCFastSO)
 >                 $(LD) $(LDFLAGS) $(MAIN1O) $(MCFASTLIB) $(LIBS) $(OutPutOpt) $(TMCFast)
 >                 @echo "$(TMCFast) done"
 > 
 > $(TMCFast2):       $(TMCFastO) $(MAIN2O)
 >                 $(LD) $(SOFLAGS) $(LDFLAGS) $(TMCFastO) $(OutPutOpt) $(TMCFastSO)
 >                 $(LD) $(LDFLAGS) $(MAIN2O) $(MCFASTLIB) $(LIBS) $(OutPutOpt) $(TMCFast2)
 >                 @echo "$(TMCFast2) done"
 > 
 > 
 > 
 > 
 > 
 > clean:
 >                 @rm -f $(OBJS) *Dict.* core
 > 
 > .SUFFIXES: .$(SrcSuf)
 > 
 > ###
 > 
 > TMCFastHepEvt.$(ObjSuf): TMCFastHepEvt.h
 > TMCFastTOF.$(ObjSuf): TMCFastTOF.h
 > TMCFastOfflineTrack.$(ObjSuf): TMCFastOfflineTrack.h
 > TMCFastHepParticle.$(ObjSuf): TMCFastHepParticle.h
 > mcfast2root.$(ObjSuf): TMCFastHepEvt.h TMCFastHepParticle.h  TMCFastTOF.h TMCFastOfflineTrack.h TMCFastHepParticle.h
 > dumpRdt.$(ObjSuf): TMCFastHepEvt.h TMCFastHepParticle.h  TMCFastTOF.h TMCFastOfflineTrack.h
 > 
 > TMCFastHepEvtDict.$(SrcSuf): TMCFastHepEvt.h TMCFastHepEvtLinkDef.h
 >         @echo "Generating dictionary TMCFastHepEvtDict..."
 >         @$(ROOTSYS)/bin/rootcint -f TMCFastHepEvtDict.$(SrcSuf) -c TMCFastHepEvt.h TMCFastHepEvtLinkDef.h
 > 
 > TMCFastTOFDict.$(SrcSuf): TMCFastTOF.h TMCFastTOFLinkDef.h
 >         @echo "Generating dictionary TMCFastTOFDict..."
 >         @$(ROOTSYS)/bin/rootcint -f TMCFastTOFDict.$(SrcSuf) -c TMCFastTOF.h TMCFastTOFLinkDef.h
 > 
 > TMCFastOfflineTrackDict.$(SrcSuf): TMCFastOfflineTrack.h TMCFastOfflineTrackLinkDef.h
 >         @echo "Generating dictionary TMCFastOfflineTrackDict..."
 >         @$(ROOTSYS)/bin/rootcint -f TMCFastOfflineTrackDict.$(SrcSuf) -c TMCFastOfflineTrack.h TMCFastOfflineTrackLinkDef.h
 > 
 > TMCFastHepParticleDict.$(SrcSuf): TMCFastHepParticle.h TMCFastHepParticleLinkDef.h
 >         @echo "Generating dictionary TMCFastHepParticleDict..."
 >         @$(ROOTSYS)/bin/rootcint -f TMCFastHepParticleDict.$(SrcSuf) -c TMCFastHepParticle.h TMCFastHepParticleLinkDef.h
 > 
 > 
 > .$(SrcSuf).$(ObjSuf):
 >         $(CXX) $(CXXFLAGS) -c $<
 > 
 > 
 > ##### #4
 > physgi03f 182% make dumpRdt
 >         CC   -I/home/physgi.usr4/eugenio/root/include -c TMCFastHepEvt.cxx
 >         CC   -I/home/physgi.usr4/eugenio/root/include -c TMCFastTOF.cxx
 >         CC   -I/home/physgi.usr4/eugenio/root/include -c TMCFastOfflineTrack.cxx
 >         CC   -I/home/physgi.usr4/eugenio/root/include -c TMCFastHepParticle.cxx
 > Generating dictionary TMCFastHepEvtDict...
 > Note: operator new() masked 1c
 >         CC   -I/home/physgi.usr4/eugenio/root/include -c TMCFastHepEvtDict.cxx
 > Generating dictionary TMCFastTOFDict...
 > Note: operator new() masked 1c
 >         CC   -I/home/physgi.usr4/eugenio/root/include -c TMCFastTOFDict.cxx
 > Generating dictionary TMCFastOfflineTrackDict...
 > Note: operator new() masked 1c
 >         CC   -I/home/physgi.usr4/eugenio/root/include -c TMCFastOfflineTrackDict.cxx
 > Generating dictionary TMCFastHepParticleDict...
 > Note: operator new() masked 1c
 >         CC   -I/home/physgi.usr4/eugenio/root/include -c TMCFastHepParticleDict.cxx
 >         CC   -I/home/physgi.usr4/eugenio/root/include -c dumpRdt.cxx
 >         CC  -shared -g TMCFastHepEvt.o TMCFastTOF.o  TMCFastOfflineTrack.o TMCFastHepParticle.o  TMCFastHepEvtDict.o TMCFastTOFDict.o  TMCFastOfflineTrackDict.o TMCFastHepParticleDict.o  -o libTMCFast.so
 > ld:
 > Unresolved:
 > TObject::Browse(TBrowser*)
 > TObject::ClassName(void) const
 > TObject::Clone(void)
 > TObject::Close(const char*)
 > TObject::Compare(TObject*)
 > TObject::Copy(TObject&)
 > TObject::Delete(const char*)
 > TObject::DistancetoPrimitive(int,int)
 > TObject::Draw(const char*)
 > TObject::DrawClass(void)
 > TObject::DrawClone(const char*)
 > TObject::Dump(void)
 > TObject::Execute(char*,char*)
 > TObject::Execute(TMethod*,TObjArray*)
 > TObject::ExecuteEvent(int,int,int)
 > TObject::GetDrawOption(void) const
 > TObject::GetUniqueID(void) const
 > TObject::GetName(void) const
 > TObject::GetIconName(void) const
 > TObject::GetObjectInfo(int,int)
 > TObject::GetTitle(void) const
 > TObject::Hash(void)
 > TObject::InheritsFrom(const char*)
 > TObject::InheritsFrom(const TClass*)
 > TObject::Inspect(void)
 > TObject::IsFolder(void)
 > TObject::IsEqual(TObject*)
 > TObject::Is3D(void)
 > TObject::ls(const char*)
 > TObject::Paint(const char*)
 > TObject::Pop(void)
 > TObject::Print(const char*)
 > TObject::Read(const char*)
 > TObject::RecursiveRemove(TObject*)
 > TObject::SavePrimitive(ofstream&,const char*)
 > TObject::SetDrawOption(const char*)
 > TObject::SetUniqueID(unsigned int)
 > TObject::Sizeof3D(void) const
 > TObject::UseCurrentStyle(void)
 > TObject::Write(const char*,int,int)
 > AddClass(const char*,short,void (*)(void))
 > RemoveClass(const char*)
 > TStorage::ObjectAlloc(unsigned int)
 > TObject::TObject(void)
 > TClonesArray::TClonesArray(char*,int,unsigned char)
 > TObject::~TObject(void)
 > TObject::operator delete(void*)
 > TStorage::ObjectAlloc(unsigned int,void*)
 > CreateClass(const char*,short,const char*,const char*,int,int)
 > TObject::SetBit(unsigned int,unsigned char)
 > sqrt
 > G__add_macro
 > G__add_compiledheader
 > G__getaryconstruct
 > G__get_linked_tagnum
 > G__int
 > G__setnull
 > G__getstructoffset
 > G__letint
 > TObject::TObject(const TObject&)
 > G__getgvp
 > G__setsizep2memfunc
 > G__getnumbaseclass
 > G__inheritance_setup
 > G__search_typename2
 > G__setnewtype
 > G__tag_memvar_setup
 > G__defined_typename
 > G__memvar_setup
 > G__tag_memvar_reset
 > G__tag_memfunc_setup
 > G__memfunc_setup
 > G__tag_memfunc_reset
 > G__resetplocal
 > G__resetglobalenv
 > G__lastifuncposition
 > G__resetifuncposition
 > G__tagtable_setup
 > G__check_setup_version
 > G__getsizep2memfunc
 > TBuffer::ReadObject(const TClass*)
 > G__add_setup_func
 > G__remove_setup_func
 > TObject::ShowMembers(TMemberInspector&,char*)
 > TBuffer::ReadVersion(void)
 > TObject::Streamer(TBuffer&)
 > TBuffer::WriteVersion(const TClass*)
 > TBuffer::Expand(int)
 > G__letdouble
 > G__double
 > TBuffer::ReadStaticArray(int*)
 > TBuffer::ReadStaticArray(double*)
 > TBuffer::WriteArray(const int*,int)
 > TBuffer::WriteArray(const double*,int)
 >         CC  -g dumpRdt.o TMCFastHepEvt.o TMCFastTOF.o  TMCFastOfflineTrack.o TMCFastHepParticle.o  TMCFastHepEvtDict.o TMCFastTOFDict.o  TMCFastOfflineTrackDict.o TMCFastHepParticleDict.o  -L/home/physgi.usr4/eugenio/root/lib -lNew -lBase -lCint -lClib -lCont -lFunc  -lGraf -lGraf3d -lHist -lHtml -lMatrix -lMeta -lMinuit -lNet  -lPostscript -lProof -lTree -lUnix -lZip -lm -ldl -o dumpRdt
 > ld:
 > The shared object /usr/lib/libdl.so did not resolve any symbols.
 >         You may want to remove it from your link line.
 > dumpRdt done
 > 
 > 
 > physgi03f 184% dumpRdt -n2 -iEvent.rdt -L
 > Dumping 2events
 > Opening file Event.rdt for input
 > Warning in <TClass::TClass>: no dictionary for class TMCFastHepParticle is availbble
 > Warning in <TClass::TClass>: no dictionary for class TMCFastHepEvt is availbble
 > Warning in <TClass::TClass>: no dictionary for class TMCFastTOF is availbble
 > Warning in <TClass::TClass>: no dictionary for class TMCFastOfflineTrack is availbble
 >  List the Branches in the Tree
 >         hepevt
 >         trace
 >         offtrk
 > 
 > 
 > -- 
 > Paul M. Eugenio
 > Dept. of Physics
 > Carnegie Mellon University
 > (412) 268 6949
 > eugenio@ernest.phys.cmu.edu
 > 
 > 
 >                 _____________________________________________________
 >                / The scholar should know; one builds science with    \
 >         o O 0 / the facts just like a house can be built of stones;   \
 >        o     | but an accumulation of facts is not a science just like |
 >   `\|||/      \           that a pile of stones is not a house.       /
 >    (o o)       \_____________________________________________________/
 > ooO_(_)_Ooo___________________________________________Henri Poincare'_
 > _____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|____
 > __|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_
 > _____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|____



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:40 MET