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