This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Initialization methods in library..


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]