problem in resolving links betwen various shared lib within Cint on Linux/debian

From: E Anciant (anciant@phnx7.saclay.cea.fr)
Date: Mon Nov 23 1998 - 15:08:40 MET


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



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:40 MET