Re: [ROOT] Win + dictionary init

From: Valeri Fine (fine@bnl.gov)
Date: Sat Jul 07 2001 - 00:31:55 MEST


We have near the same problem under Linux with ROOT 3.01.05 (There was no such problem with
3.00/06)         
  
The ROOT-based  code dies calling gROOT-ProcessLineFAst as follows:


 void TApplication::LoadGraphicsLibs()

 . . . 
  gROOT->ProcessLineFast("new TGX11("X11", "ROOT interface to X11");");
   

 Switching ROOTSYS from 3.01/05 to 3.00/06 cures the probem.

   Any idea ?

  My best regards
                                    Valeri
----- Original Message ----- 
From: "Axel Naumann" <axel@fnal.gov>
To: "Roottalk@Pcroot. Cern. Ch" <roottalk@pcroot.cern.ch>
Sent: Friday, July 06, 2001 4:23 PM
Subject: [ROOT] Win + dictionary init


> Hi,
> 
> I still have this persistent problem with win and the dictionary. Apparently
> the order of the instantiation of the globals is messed up sometimes. Here
> is what's happening on my machine (which breaks the dictionary) when
> starting a program that links against root libraries:
> 
> * a TROOT object is created
>   - this calls new TCint, which calls at some point G__reset_setup_funcs(),
> here's the stack:
> ---
> G__reset_setup_funcs() line 163
> G__scratch_all() line 257
> G__main() line 646
> G__init_cint() line 350 + 19 bytes
> TCint::ResetAll() line 328 + 10 bytes
> TCint::TCint(const char * 0x101fd864, const char * 0x101fd84c) line 101
> ---
> 
>   - now, G__call_setup_funcs() is called. Those are empty, as none of the
> global G__cpp_setup guys is instantiated yet. Call stack:
> ---
> G__call_setup_funcs() line 129
> G__main() line 703
> G__init_cint() line 350 + 19 bytes
> TCint::ResetAll() line 328 + 10 bytes
> TCint::TCint(const char * 0x101fd864, const char * 0x101fd84c) line 101
> TROOT::TROOT(const char * 0x101fd830, const char * 0x101fd818, void (void)*
> * 0x00000000) line 245 + 40 bytes
> ---
> 
> * finally, the G__cpp_setup guys are called. But now it's too late! TCint
> doesn't care anymore, it thinks it's done with its dictionary
> initialization, so G__call_setup_funcs is not called anymore. Example for my
> first call of G__add_setup_func:
> ---
> G__add_setup_func() line 65
> LIBCORE! G__cpp_setup_initG__Base1::G__cpp_setup_initG__Base1(void) + 22
> bytes
> LIBCORE! G__cpp_setupG__Base1 + 105 bytes
> ---
> 
> * and now my main() gets called. And the dictionary is empty.
> 
> So THIS is the reason why sometimes even UInt_t was unknown to Root. How can
> we fix this? How can we make sure all G__cpp_setups "register" first, before
> cint calls the setup funcs? Or shall we call G__call_setup_functs directly
> at some point? Or can I circumvent this by some magical permutaion on my
> link line?
> 
> (Win 2000, Root since 3.00/something)
> 
> Cheers, Axel.
> 
> 



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:51 MET