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
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:05 MET