Re: [ROOT] problems with compiled TMapFile app

From: Robert Michaels (rom@jlab.org)
Date: Mon Feb 09 2004 - 21:27:04 MET


Yes, that works great !!   Thanks !!!

On 9 Feb 2004, Fons Rademakers wrote:

> Hi Robert,
> 
>  please make sure that libNew.so is the first of all libs, to do that
> use "root-config --new --glibs"
> 
> Cheers, Fons.
> 
> 
> 
> On Mon, 2004-02-09 at 16:28, Robert Michaels wrote:
> > Using ROOT 3.05-07 with gcc 3.2.3 on Red Hat Enterprise Linux WS release 3
> > and the same problem occurs with ROOT 3.10-02 (same gcc and RedHat).
> > 
> > My problem is with the following TMapFile example.  Although it does work
> > successfully as a macro run under rootn.exe, the compiled code gives an
> > error message and does not produce a map file. A similar problem was 
> > reported by Jianglai Liu in roottalk Nov 18, 2003, but with no resolution.
> > 
> > 1. First, here is what works:
> > 
> >   rootn.exe
> >   root [0] .x hprod.cxx
> > 
> >   (--> Everything fine, the mapfile "hsimple.map" is created and
> >        contains a histogram.)
> > 
> > 2. Here is what does NOT work -- produces no map file
> > 
> >   ./hprod
> >   Error in <TMapFile::TMapFile>: no memory mapped file capability available
> >   Use rootn.exe or link application against "-lNew"
> > 
> >   (--> But it was linked to lNew, see below.  Also $LD_LIBRARY_PATH and
> >    $ROOTSYS are correct.)
> > 
> > The question is why does the compiled version fail if I did in fact
> > link against "-lNew" ?  Another hint is that on another RH distribution 
> > (RH 8.0 with gcc 3.2.3 and the above versions of ROOT) the compiled code 
> > does successfully run with the same Makefile.  So, it may be difficult
> > to reproduce since it does work on some systems. 
> > 
> > Details:
> > 
> > Here is the successful macro "hprod.cxx"
> > 
> >   {  // macro version (run in rootn.exe)
> > 
> >   // Set the map address as per instructions (using rootn.exe)
> >   // http://root.cern.ch/lxr/source/base/src/TMapFile.cxx#1065
> >     TMapFile::SetMapAddress(0x41d92000);
> > 
> >     TMapFile* mfile = TMapFile::Create("hsimple.map","RECREATE", 100000,
> >                             "Demo memory mapped file with histograms");
> >   
> >      TH1F* hpx    = new TH1F("hpx","This is the px distribution",100,-4,4);
> >    
> >      Float_t px, py;
> >      int ii = 0;
> >      while (1) {
> >        gRandom->Rannor(px,py);
> >        hpx->Fill(px);
> >        if (!(ii % 100)) {
> >          mfile->Update(); 
> >          cout << "Update "<<ii<<endl;      
> >        }   
> >        ii++;
> >        gSystem->Sleep(40);
> >      }
> >   }
> > 
> > 
> > ----------------
> > And here is the source of the compiled code (identical to macro
> > except for header stuff)
> > 
> > #include <TROOT.h>
> > #include <TMapFile.h>
> > #include <TH1.h>
> > #include <iostream>
> > #include <TRandom.h>
> > #include <TSystem.h>
> > 
> > using namespace std;
> > int main()
> > {
> > 
> > // Set the map address as per instructions (using rootn.exe)
> > // http://root.cern.ch/lxr/source/base/src/TMapFile.cxx#1065
> >   TMapFile::SetMapAddress(0x41d92000);
> > 
> >   TMapFile* mfile = TMapFile::Create("hsimple.map","RECREATE", 100000,
> >                             "Demo memory mapped file with histograms");
> >   
> >    TH1F* hpx    = new TH1F("hpx","This is the px distribution",100,-4,4);
> >    
> >    Float_t px, py;
> >    int ii = 0;
> >    while (1) {
> >      gRandom->Rannor(px,py);
> >      hpx->Fill(px);
> >      if (!(ii % 100)) {
> >        mfile->Update(); 
> >        cout << "Update "<<ii<<endl;      
> >      }   
> >      ii++;
> >      gSystem->Sleep(40);
> >    }
> > }
> > 
> > 
> > ---------------------
> > And here is the (simplified) Makefile for the compiled code
> > 
> > ROOTCFLAGS    = $(shell root-config --cflags)
> > ROOTLIBS      = $(shell root-config --libs) 
> > ROOTLIBS      += $(ROOTSYS)/lib/libNew.so
> > ROOTGLIBS     = $(shell root-config --glibs) 
> > ROOTGLIBS     += $(ROOTSYS)/lib/libNew.so
> > 
> > CXXFLAGS      = -O -Wall -fPIC -I$(ROOTSYS)/include -g
> > CC = g++
> > OPTIM=  
> > CXXFLAGS +=$(ROOTCFLAGS)
> > LIBS = $(LIBM) $(ROOTLIBS) $(ROOTGLIBS)
> > hprod:   hprod.o
> > 	$(CC) $(CXXFLAGS) -o hprod hprod.o $(LIBS)
> > 
> > 
> > ---------------------
> > And here is what the compilation says (it seems "-lNew" is linked)
> > 
> > rm *.o ; make
> > g++ -O -Wall -fPIC -I/apps/root/3.05-07-gcc3.2.3/root/include -g -D_REENTRANT -I/apps/root/3.05-07-gcc3.2.3/root/include -c hprod.C
> > g++ -O -Wall -fPIC -I/apps/root/3.05-07-gcc3.2.3/root/include -g -D_REENTRANT -I/apps/root/3.05-07-gcc3.2.3/root/include -o hprod hprod.o  -L/apps/root/3.05-07-gcc3.2.3/root/lib -lCore -lCint -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lpthread -lm -ldl -rdynamic  /apps/root/3.05-07-gcc3.2.3/root/lib/libNew.so -L/apps/root/3.05-07-gcc3.2.3/root/lib -lCore -lCint -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lGui -lpthread -lm -ldl -rdynamic  /apps/root/3.05-07-gcc3.2.3/root/lib/libNew.so
> > 
> > ----
> > thanks !
> > Bob Michaels
> > Jefferson Lab
> -- 
> Org:    CERN, European Laboratory for Particle Physics.
> Mail:   1211 Geneve 23, Switzerland
> E-Mail: Fons.Rademakers@cern.ch              Phone: +41 22 7679248
> WWW:    http://www.rademakers.org/fons/      Fax:   +41 22 7679480
> 
> 



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:05 MET