Initialization methods in library..

Ajay Bansal abansal@netegrity.com
Tue Aug 26 04:58:00 GMT 2003


I have an application that calls a init method in a library lib1 using the
following directive

static void __attribute__ ((__constructor__)) _initfunc();

where _initfunc() is a global method. This method internally calls a method
on a static member variable of a class as shown below

static void _initfunc()
{
      g_Master::CacheCount->Setvalue(1);
}

where the class g_Master is defined in the source file of a library lib2 as
follows

class g_Master
{
     public:
          static CSmSimpleObj CacheCount;
           ................................................
}

CSmSimpleObj g_Master::CacheCount;

The problem is that the initialization of the static member variable in lib2
does not happen before the SetValue method is invoked on it in lib1.
Consequently a core dump occurs. 

The application has been compiled using gcc 3.2.1 on Linux Advance Server
2.1. The above piece of code works fine on Solaris 5.8 if I use the
corresponding #pragma init directive to invoke the init method _initfunc().
Can someone please tell me how I can guarantee initialization of the static
class variables before they are being actually used.



More information about the Gcc-help mailing list