Re: [ROOT] problem creating/using globals within root

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Nov 05 2003 - 21:22:16 MET


Hi Chris,

Declare your extern in one of your includes, eg A.h

R__EXTERN is equivalent to extern on Unix systems.
Under Windows, it is a macro that expands additional code
to be able to use globals between DLLs.

Rene Brun

On Wed, 5 Nov 
2003 
jillings@caltech.edu wrote:

> Hi all,
>     I have a problem creating/using global objects. I have reproduced it
> in sample code here.
>  - I have two classes A & B.
>  - in A.cc I define a global pointer gAptr
>  - in B.cc I have a statement extern A* gAptr
>  - B has a method which uses gAptr
>  - I create the dict/.so file/... (see Makefile)
>  - I compile executable code with an extern A* gAptr in the file     
> abexe.cc ==> everything works
>  - I load the .so file into root, instantiate gAptr, and I seg fault
>    
> I understand why this works in the compiled version - there is no
> ambiguity about what gAptr is.
> 
> Running the same commands within root, it must be unclear about what
> gAptr is and gAptr is just an automatically generated new variable, not
> the global I'd defined.
> 
> Is there a way around this?
> As a minor side question, what is the difference between R__EXTERN and
> extern?
> 
> Thank you for your help,
> 
> Cheers,
> 
> Chris
> 
> --
> 
> ********************************
> Chris Jillings
> Kellogg Radiation Laboratory
> California Institute of Technology
> jillings@caltech.edu
> http://www.krl.caltech.edu/~jillings
> ********************************
> 
> 
> 



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:16 MET