Hello,
Meanwhile I found the reason for my problem. When I include a shared
library A into another shared library B, in the compiled version A is
loaded automatically once I load B. This is not the case in CINT, where I
have to load A and B separately by hand. I wasn't aware of that.
Thank you for your help,
Markus Huening
======================================================
Markus Huening
Desy/FDET
Notkestrasse 85
D-22607 Hamburg
Germany
Tel: ++49 (040)8998-3030
Fax: ++49 (040)8998-3094
e-mail: markus.huening@desy.de
On Thu, 8 Mar 2001, Masaharu Goto wrote:
> Hello Markus,
>
> I need to make a correction to Fons's comment.
>
> In fact, what Markus have done is almost correct.
> I guess the problems was that you did not compile
> and link definition of member function when making
> shared library. Probably, you linked only dictionary
> files.
>
> $ rootcint -f Teq_clientDict.cxx -c eq_client.h LinkDef.h
> $ g++ -fPIC -c -I$ROOTSYS/include eq_clientDict.cxx
> $ g++ -shared -I$ROOTSYS/include -o eq_client.so eq_clientDict.o
>
> You need to add TScreen.cxx also.
>
> $ g++ -fPIC -c -I$ROOTSYS/include eq_client.cxx
> $ g++ -shared -I$ROOTSYS/inclue -o eq_client.so eq_clientDict.o eq_client.o
>
> Note that compiler options shown above may not be correct. I simply tried
> to show you a concept. You may also want to give definition of EqData to
> rootcint.
>
> Thank you
> Masaharu Goto
>
>
> >Date: Wed, 07 Mar 2001 16:31:51 +0000
> >From: Fons Rademakers <Fons.Rademakers@cern.ch>
> >To: Markus Huening <mhuening@sun52a.desy.de>
> >Cc: roottalk@pcroot.cern.ch, Masaharu Goto <MXJ02154@niftyserve.or.jp>
> >Subject: Re: [ROOT] making of libraries
> >
> >Hi Markus,
> >
> > you can not fake a complete classes. CINT needs to know the correct
> >sizes when creating EqAdr and EqData objects grabber and grab.
> >
> >It will work if you make grabber and grab pointers to EqAdr and EqData.
> >In that case you have only to provide simple forward declarations.
> >
> >#if !defined(__CINT__)
> >
> >#include <eq_client.h>
> >#include "/usr/ttfsvr2/doocs/lib/include/eq_client.h"
> >
> >#else
> >
> >class EqAdr;
> >class EqData;
> >
> >#endif
> >
> >
> >Cheers, Fons.
> >
> >
> >
> >Markus Huening wrote:
> >>
> >> Hallo everybody,
> >>
> >> I have some problem when I try to include some external library into my
> >> own to make it executeable with CINT. I couldn't read it directly with
> >> rootcint so I tried some workaround which I found in the FAQs:
> >> ...
> >>
> >> #if !defined(__CINT__)
> >>
> >> #include <eq_client.h>
> >> #include "/usr/ttfsvr2/doocs/lib/include/eq_client.h"
> >>
> >> #else
> >>
> >> class EqAdr;
> >> {
> >> public:
> >> EqAdr();
> >> ~EqAdr();
> >> void adr(char*);
> >> };
> >> class EqData;
> >> class EqCall
> >> {
> >> public:
> >> EqCall();
> >> ~EqCall();
> >> EqData set(EqAdr*, EqData*);
> >> };
> >>
> >> #endif
> >> */
> >>
> >> class TScreen : public TH2S
> >> {
> >> private:
> >> EqAdr grabber;
> >> EqData grab;
> >> EqData *dcsresult;
> >> EqCall *dcscall;
> >>
> >> ...
> >>
> >> This works in compiled programs and I can load the library
> >> (gSystem->Load) into the CINT. But as soon as I start the constructor of
> >> TScreen (which also initialises grabber, grab, dcsresult & dcscall),
> >> the interpreter is aborted with the error message
> >> ...
> >> root [1] fImg=TScreen("fImg","Picture from Viewscreen",640,256);
> >> ld.so.1: /home/rasmus/Root/ROOT/bin/root.exe: fatal: relocation error:
> >> file /home/mhuening/root/own/libTScreen.so: symbol __0oFEqAdrctv:
> >> referenced symbol not found
> >> ...
> >>
> >> What did I do wrong?
> >>
> >> Greetings
> >>
> >> Markus Huening
> >> ======================================================
> >> Markus Huening
> >> Desy/FDET
> >> Notkestrasse 85
> >> D-22607 Hamburg
> >> Germany
> >>
> >> Tel: ++49 (040)8998-3030
> >> Fax: ++49 (040)8998-3094
> >> e-mail: markus.huening@desy.de
> >
> >--
> >Org: CERN, European Laboratory for Particle Physics.
> >Mail: 1211 Geneve 23, Switzerland
> >E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248
> >WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7677910
>
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:39 MET