Hi Eric, this are the variables per Linux platform: 1) compiler: gcc (<= RH 5.0) egcs (>= RH 5.1) 2) libc: libc5 (<= RH 4.2) libc6/glibc (>= RH 5.0) So on RH5.0 you should have gcc/glibc. In that case take the binary distribution: ftp://root.cern.ch/root/root_v2.00.Linux.2.0.33.glibc.tar.gz Further, don't compile with any exception handling or RTTI options on. The exact compiler options for your platform should be copied from the file $ROOTSYS/test/Makefile. Cheers, Fons. E Anciant wrote: > > Hello, > > I am trying to implement some code using ROOT > on linux debian with gcc & libc6. > > I installed the ROOT binaries for Redhat5.0 ( glibc & gcc ) > (I have been told glibc and libc6 were equivalent, may be this > is the source of all my problems..) > > root works just fine, the /test exemples compile > and run, the /tutorials exemples execute without problem, > > Yet, If I compile several shared libraries and load them > into cint, cross references from one to the other are not > resolved. > > Here follows a little exemple to illustrate this: > > I have a little C routine hello.C that I compile into a shared > lib libt1.so: (Don't pay attention to all the include paths, > this is because I am using some sort of generic makefile, > those include paths have no effect.) > > sip bash t1 :more hello.c > void hello() { > printf("hello word \n"); > } > sip bash t1 : > > gcc -O2 -fwritable-strings -O -Wall -fPIC -DLinux > -I/home/anciant/CLAS/inc_derived -I. > -I/mnt/cdrom/release-1-19/packages/include > -I/mnt/cdrom/release-1-19/packages/inc_derived -I/usr/local/root/include > -c \ > hello.c -o /home/anciant/CLAS/obj/Linux/t1_hello_sh.o; > hello.c: In function `hello': > hello.c:2: warning: implicit declaration of function `printf' > g++ -shared \ > /home/anciant/CLAS/obj/Linux/t1_hello_sh.o \ > -o /home/anciant/CLAS/slib/Linux/libt1.so > > I make a small class hellc that calls the hello routine > in its constructor: > > sip bash t2 :more hellc.h > extern "C" { > void hello(); > } > > class hellc { > public: > hellc() {hello(); } > }; > > sip bash t2 : > > sip bash t2 :more hellc.cc > #include "hellc.h" > sip bash t2 : > sip bash t2 :more t2_LinkDef.h > #ifdef __CINT__ > > #pragma link off all globals; > #pragma link off all classes; > #pragma link off all functions; > > #pragma link C++ class hellc; > > #endif > sip bash t2 :g++ -fhandle-exceptions -O -Wall -fPIC -DLinux > -I/home/anciant/CLAS/inc_derived -I. -I./ > -I/mnt/cdrom/release-1-19/packages/include > -I/mnt/cdrom/release-1-19/packages/inc_derived -I/usr/local/root/include > -c \ > hellc.cc -o /home/anciant/CLAS/obj/Linux/t2_hellc_sh.o > Generating library dictionnary > rootcint -f t2Cint.cc -c \ > hellc.h t2_LinkDef.h || \ > rm t2Cint.cc t2Cint.h; > Note: operator new() masked 1c > Note: operator delete() masked 1c > Class hellc: Streamer() not declared > Class hellc: ShowMembers() not declared > mv t2Cint.cc /home/anciant/CLAS/src_derived/t2Cint.cc > mv t2Cint.h /home/anciant/CLAS/inc_derived/t2Cint.h > g++ -fhandle-exceptions -O -Wall -fPIC -DLinux > -I/home/anciant/CLAS/inc_derived -I. -I./ > -I/mnt/cdrom/release-1-19/packages/include > -I/mnt/cdrom/release-1-19/packages/inc_derived -I/usr/local/root/include > -c \ > /home/anciant/CLAS/src_derived/t2Cint.cc -o > /home/anciant/CLAS/obj/Linux/t2Cint.o > g++ -shared \ > /home/anciant/CLAS/obj/Linux/t2_hellc_sh.o > /home/anciant/CLAS/obj/Linux/t2Cint.o\ > -o /home/anciant/CLAS/slib/Linux/libROOTt2.so > sip bash t2 : > > Now if I load the two libraries in Cint, and try to create > one hellc object, it crashes: > > sip bash t2 :root > ******************************************* > * * > * W E L C O M E to R O O T * > * * > * Version 2.00/13 30 October 1998 * > * * > * You are welcome to visit our Web site * > * http://root.cern.ch * > * * > ******************************************* > > CINT/ROOT C/C++ Interpreter version 5.13.78, Oct 22 1998 > Type ? for help. Commands must be C++ statements. > Enclose multiple statements between { }. > root [0] .L /home/anciant/CLAS/slib/Linux/libROOTt2.so > root [1] .L /home/anciant/CLAS/slib/Linux/libt1.so > root [2] .class hellc > =========================================================================== > class hellc > size=0x1 > (tagnum=354,voffset=-1,isabstract=0,parent=-1,gcomp=0,=~cd=0) > List of base > class-------------------------------------------------------- > List of member > variable--------------------------------------------------- > Defined in hellc > List of member > function--------------------------------------------------- > Defined in hellc > filename line:size busy function type and name > (compiled) 0:0 0 public: hellc hellc(void); > (compiled) 0:0 0 public: hellc hellc(hellc&); > (compiled) 0:0 0 public: void ~hellc(void); > root [3] > root [3] hellc h; > /usr/local/root/bin/root.exe: error in loading shared libraries > /home/anciant/CLAS/slib/Linux/libROOTt2.so: undefined symbol: hello > sip bash t2 : > > Yet, if I put all the objects into one single library, it works: > > sip bash t2 :g++ -shared \ > > /home/anciant/CLAS/obj/Linux/t2_hellc_sh.o /home/anciant/CLAS/obj/Linux/t2Cint.o\ > > /home/anciant/CLAS/obj/Linux/t1_hello_sh.o \ > > -o /home/anciant/CLAS/slib/Linux/libtest.so > sip bash t2 : > sip bash t2 :root > ******************************************* > * * > * W E L C O M E to R O O T * > * * > * Version 2.00/13 30 October 1998 * > * * > * You are welcome to visit our Web site * > * http://root.cern.ch * > * * > ******************************************* > > CINT/ROOT C/C++ Interpreter version 5.13.78, Oct 22 1998 > Type ? for help. Commands must be C++ statements. > Enclose multiple statements between { }. > root [0] .L /home/anciant/CLAS/slib/Linux/libtest.so > root [1] .class hellc > =========================================================================== > class hellc > size=0x1 > (tagnum=354,voffset=-1,isabstract=0,parent=-1,gcomp=0,=~cd=0) > List of base > class-------------------------------------------------------- > List of member > variable--------------------------------------------------- > Defined in hellc > List of member > function--------------------------------------------------- > Defined in hellc > filename line:size busy function type and name > (compiled) 0:0 0 public: hellc hellc(void); > (compiled) 0:0 0 public: hellc hellc(hellc&); > (compiled) 0:0 0 public: void ~hellc(void); > root [2] > root [2] hellc h > hello word > root [3] > > If I try the same business on Sun, with 2 libraries, > it works: > > cc -O -KPIC -DSunOS -D_SUNOS_SOURCE > -I/home/crash4/anciant/CLAS/inc_derived -I. > -I/home/crash4/thauger/CLAS/builds/TEST/packages/include > -I/home/crash4/thauger/CLAS/builds/TEST/packages/inc_derived > -I/opt/gnu/include -I/usr/local/include -I/usr/dt/include > -I/usr/openwin/share/include -I/home/crash4/thauger/root/include -c \ > hello.c -o > /home/crash4/anciant/CLAS/obj/SunOS/t1_hello_sh.o; > CC -O -G \ > /home/crash4/anciant/CLAS/obj/SunOS/t1_hello_sh.o \ > -o /home/crash4/anciant/CLAS/slib/SunOS/libt1.so > phns32: /home/anciant/tests/t1 <198> > > CC -O -KPIC -DSunOS -D_SUNOS_SOURCE > -I/home/crash4/anciant/CLAS/inc_derived -I. -I./ > -I/home/crash4/thauger/CLAS/builds/TEST/packages/include > -I/home/crash4/thauger/CLAS/builds/TEST/packages/inc_derived > -I/opt/gnu/include -I/usr/local/include -I/usr/dt/include > -I/usr/openwin/share/include -I/home/crash4/thauger/root/include -c \ > hellc.cc -o > /home/crash4/anciant/CLAS/obj/SunOS/t2_hellc_sh.o > Generating library dictionnary > rootcint -f t2Cint.cc -c \ > hellc.h t2_LinkDef.h || \ > rm t2Cint.cc t2Cint.h; > Note: operator new() masked 1c > Note: operator delete() masked 1c > Class hellc: Streamer() not declared > Class hellc: ShowMembers() not declared > mv t2Cint.cc /home/crash4/anciant/CLAS/src_derived/t2Cint.cc > mv t2Cint.h /home/crash4/anciant/CLAS/inc_derived/t2Cint.h > CC -O -KPIC -DSunOS -D_SUNOS_SOURCE > -I/home/crash4/anciant/CLAS/inc_derived -I. -I./ > -I/home/crash4/thauger/CLAS/builds/TEST/packages/include > -I/home/crash4/thauger/CLAS/builds/TEST/packages/inc_derived > -I/opt/gnu/include -I/usr/local/include -I/usr/dt/include > -I/usr/openwin/share/include -I/home/crash4/thauger/root/include -c \ > /home/crash4/anciant/CLAS/src_derived/t2Cint.cc -o > /home/crash4/anciant/CLAS/obj/SunOS/t2Cint.o > CC -O -G \ > /home/crash4/anciant/CLAS/obj/SunOS/t2_hellc_sh.o > /home/crash4/anciant/CLAS/obj/SunOS/t2Cint.o\ > -o /home/crash4/anciant/CLAS/slib/SunOS/libROOTt2.so > phns32: /home/anciant/tests/t2 <200> root > Warning in <TGClient::GetColorByName>: couldn't retrieve color > LightYellow > ******************************************* > * * > * W E L C O M E to R O O T * > * * > * Version 2.00/13 30 October 1998 * > * * > * You are welcome to visit our Web site * > * http://root.cern.ch * > * * > ******************************************* > > CINT/ROOT C/C++ Interpreter version 5.13.78, Oct 22 1998 > Type ? for help. Commands must be C++ statements. > Enclose multiple statements between { }. > root [0] .L /home/crash4/anciant/CLAS/slib/SunOS/libROOTt2.so > root [1] .L /home/crash4/anciant/CLAS/slib/SunOS/libt1.so > root [2] .class hellc > =========================================================================== > class hellc > size=0x1 > (tagnum=354,voffset=-1,isabstract=0,parent=-1,gcomp=0,=~cd=0) > List of base > class-------------------------------------------------------- > List of member > variable--------------------------------------------------- > Defined in hellc > List of member > function--------------------------------------------------- > Defined in hellc > filename line:size busy function type and name > (compiled) 0:0 0 public: hellc hellc(void); > (compiled) 0:0 0 public: hellc hellc(hellc&); > (compiled) 0:0 0 public: void ~hellc(void); > root [3] > root [3] hellc h > hello word > root [4] > > I would really apreciate some advices, hints or suggestions > before I go into the business of recompiling all ROOT sources > for my compiler and my version of libc. > I know I tried that some time ago, and it made things rather worse > (root would not even execute.) > > thanks, > > eric > > -- > ----- Eric Anciant ------------ > DAPNIA/SPhN - Bat 703 - Orme des merisiers > CE-SACLAY - 91191 GIF-SUR-YVETTE Cedex - FRANCE > Office: (33 - 1) 69 08 22 47 fax: (33-1) 69 08 75 84 -- Org: CERN, European Laboratory for Particle Physics. Mail: 1211 Geneve 23, Switzerland Phone: +41 22 7679248 E-Mail: Fons.Rademakers@cern.ch Fax: +41 22 7677910
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:40 MET