Hi Ingo,
I have no problems with your example. Could you specify which version
of Root you are using ?
Could you test the following small procedure on your machine?
1- run the following script
===========================
rootcint -f cint.C -c Momentum3.h LinkDef3.h
g++ -fno-rtti -fno-exceptions -fPIC -I$ROOTSYS/include -c cint.C
Momentum3.C
g++ -g -Wl,-soname,Momentum3.so -shared cint.o Momentum3.o -o
Momentum3.so
with
Momentum3.h
===========
#ifndef MOMENTUM3_H
#define MOMENTUM3_H
#include "TObject.h"
class Momentum3: public TObject
{
public:
Momentum3();
Float_t p;
ClassDef(Momentum3,1)
};
#endif
Momentum3.C
===========
#include "Momentum3.h"
ClassImp(Momentum3)
Momentum3::Momentum3()
{
p=0;
}
LinkDef3.h
==========
#ifdef __CINT__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class Momentum3;
#endif
The script above runs rootcint and generates a small shared lib
Momentum3.so.
Now runs the standard Root executable and run the following macro m3.C
Root > .x m3.C
m3.C
====
{
gSystem.Load("Momentum3");
Momentum3 mom, *mymom = & mom;
TFile *hfile = new TFile("my.root", "RECREATE");
TTree *tree = new TTree("T", "MyTree");
tree->Branch("momentum", "Momentum3", &mymom, 64000, 1);
for (int i=0; i< 3; i++)
{
mymom->p=i;
tree->Fill();
}
tree->Print();
hfile->Write();
hfile->Close();
}
Rene Brun
Ingo Froehlich wrote:
>
> Hi ROOTers,
>
> I'm trying to gain experience with root-trees. For this reason I tried to
> import a small test-class to root:
>
> -----------------Momentum3.h
> #ifndef MOMENTUM3_H
> #define MOMENTUM3_H
> #include "TObject.h"
>
> class Momentum3: public TObject
> {
> public:
> Momentum3();
> Float_t p;
>
> ClassDef(Momentum3,1)
> };
> #endif
> -----------------Momentum3.cpp
> #include "Momentum3.h"
> ClassImp(Momentum3)
>
> Momentum3::Momentum3()
> {
> p=0;
> };
> -----------------
> This class has been used to fill a root-tree:
> -----------------Main.cpp
> #include "TROOT.h"
> #include "TFile.h"
> #include "TTree.h"
> #include "TBranch.h"
> #include "Momentum3.h"
>
> int main(void)
> {
> TROOT root("disto","Disto Analysis");
> Momentum3 mom, *mymom = & mom;
> TFile *hfile = new TFile("my.root", "RECREATE");
> TTree *tree = new TTree("T", "MyTree");
> tree->Branch("momentum", "Momentum3", &mymom, 64000, 1);
>
> for (int i=0; i< 3; i++)
> {
> mymom->p=i;
> tree->Fill();
> }
>
> hfile->Write();
> hfile->Close();
> return 0;
> }
> ----------------
> If I start my Main, it tells me:
> Fatal in <operator delete>: unreasonable size (1084523672)
> aborting
>
> In addition, I compile a *.so from the Momentum3 class and the Dictionary,
> but if I try to load this into CINT, a segmentation fault appears
>
> Do I misunderstand something?
>
> Thanks for your help and best regards,
>
> Ingo Froehlich
>
> --
> Ingo Froehlich, II. Physikalisches Institut, Universitaet Giessen
> Heinrich-Buff-Ring 16, D-35392 Giessen | Tel.: 0641 - 99 33250
> EMail: Ingo.Froehlich@exp2.physik.uni-giessen.de | Fax : 0641 - 99 33209
> Sekretariat II. Physik: 0641 - 99 33261 | :-)
>
> PS: My Makefile:
> ----------------
> .SUFFIXES: .cpp .c
> PACKAGE = Tproject
> VERSION = 0
> DICT = Momentum3.h
> OBJ = EventDict.o Momentum3.o Main.o
> TOBJS = EventDict.o Momentum3.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
>
> # Linux
> C = gcc
> CFLAGS = -O3 -Wall -D_DEBUG
> CXX = g++
> CXXFLAGS = -O3 -Wall -fPIC -I$(ROOTSYS)/include -D_DEBUG -DLINUX
> LD = g++
> LDFLAGS = -g
> SOFLAGS = -shared
> LIBS = $(ROOTLIBS) -lg++ -lm -ldl -rdynamic
> GLIBS = $(ROOTLIBS) $(ROOTGLIBS) -L/usr/X11R6/lib \
> -lXpm -lX11 -lg++ -lm -ldl -rdynamic
>
> #------------------------------------------------------------------------------
>
> all: Momentum.so Main
>
> Momentum.so: $(TOBJS)
> $(LD) $(SOFLAGS) $(TOBJS) $(GLIBS) -o Momentum.so
> @echo "$(PROGRAMM) done"
>
> Main: $(OBJ)
> $(LD) $(LDFLAGS) $(OBJ) $(GLIBS) -o Main
> @echo "$(PROGRAMM) done"
>
> clean:
> @rm -f $(OBJS) core
>
> .cpp.o:
> @echo compiling $<
> $(CXX) $(CXXFLAGS) -c $<
>
> .c.o:
> @echo compiling $<
> $(C) $(CFLAGS) -c $<
>
> EventDict.cpp: $(DICT)
> @echo "Generating Dictionary"
> @$(ROOTSYS)/bin/rootcint -f EventDict.cpp -c $(DICT)
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:37 MET