RE: [ROOT] 2 dictionnaries ?

From: Philippe Canal (pcanal@fnal.gov)
Date: Mon Sep 23 2002 - 11:36:05 MEST


Hi Colin,

ROOT 3.03/08 had some problem dealing with 'Fake' classes (your exact case
without the MakeProject library).  Upgrading to 3.03/09 should solve the
problem.

Cheers,
Philippe.

-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Colin Bernet
Sent: Monday, September 23, 2002 2:49 AM
To: Rene Brun
Cc: roottalk@pcroot.cern.ch
Subject: Re: [ROOT] 2 dictionnaries ?



Hi Rene,

Sorry, I forgot that : root 3.03/08 on a RH6.1 (kernel 2.2.19-6.2.1.1smp).
/afs/cern.ch/sw/root/v3.03.08/rh61_gcc2952/root/
I answered your questions below

cheers,

Colin

On Mon, 23 Sep 2002, Rene Brun wrote:

> Hi Colin,
>
> Please indicate which version of Root and the platform?
>
> see below
>
> >
> > What I want to do is :
> > 1 - Fill trees (split 99) using classes located in lib1.so
> > 2 - Use MakeClass on one of these trees, modify the code so it compiles,
> > and create a shared library lib2.so out of that.
> >
>
> This should work. Why do you have to modify the code to get it compiled?
> please try version 3.03/09 in case you use older versions.
>

The tree has one masterbranch, based on my event class.

****************************************************************************
**
*Branch  :event
*
*Entries :     1461 : BranchElement (see
below)                              *
*...........................................................................
.*

Because of this guy, MakeClass adds a
   MEvent          *event;

to the header, without including the necessary MEvent.h, nor using this
pointer afterwards. After removing this, it compiles

> > The only way to work that out was to create a library demo.so using
> > TFile::MakeProject.
> > in ROOT, I can then do
> > .L demo.so
> > .L lib2.so
> > this works perfectly, despite the fact demo.so, to my point of view,
> > should not be necessary to read a tree containing basic data types.
>
> Using version 3.03, you should be able to read/query a file containing
> classes and not only basic data types, even if you do not have the
> original class library.

This only gives segv, if I try to do other than print the tree.
> >
> > Now, I have some code in lib1.so that I would
> > like to reuse in lib2.so. I tried to load these libraries in different
> > orders, to link lib1.so as a module inside lib2.so, but nothing works.
I'm
> > afraid this is because 2 dictionnaries are conflicting.
>
> if lib2 depends on lib1, you should load lib1 first. I cannot tell you
> more without looking at your classes.
>

This is what I'm doing.

root [0] .L libminidst.so
root [1] .L libreadmdst.so
root [2] ReadMDST mdst("MDST","DstOut_ds_22388/*/*.root","")
Error: Function ReadMDSTmdst("MDST","DstOut_ds_22388/*/*.root","") is not
defined in current scope  FILE:/tmp/file6ZtX6E_cint LINE:1
Possible candidates are...
filename       line:size busy function type and name
*** Interpreter error recovered ***

ReadMDST symbols are contained in libreadmdst.so. It is just an enhanced
version of the MakeClass code.

> I repeat: You can analyze a Tree containing classes, even if you do not
> have the original class library.

This would be great ! If you want to have a further look, I prepared a
directory for you in
/afs/cern.ch/user/c/cbernet/public/Rene
there, MDST contains the package used to produce the tree in MDST_0.root
ReadMDST was generated by MadeClass, and then modified.
everything is compiled with the precited version of root and platform, but
it should be no problem to recompile it.

thanks for your help,
Colin


>
> Rene Brun
>
>
> >
> > Is there a way to solve this problem without duplicating the source
files
> > of lib1 to compile and link them in lib2 ?
> >
> > Many thanks,
> >
> > Colin
> >
> >
>
>



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:10 MET