- 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'_
> _____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|____
> __|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_
> _____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|____