From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcel Ruff To: gcc Subject: Static initializer in shared libraries on Linux #2 Date: Sun, 16 Sep 2001 06:18:00 -0000 Message-id: <3BA4A6A2.5040003@swand.lake.de> X-SW-Source: 2001-09/msg00624.html Hi, I forgot to mention that if i compile xy.C to an executable, it runs fine, but if xy.C is compiled to a shared library, and invoked thru a java virtual machine ('no main()') it fails as noted below i have two .so libs, and get a sig 11 when accessing a static string variable, accessing a static variable of type char* works fine: InitTest.H ----------- class InitTest { public: static char * charName; public: static string stringName; }; #if EXTERN_MAIN char * InitTest::charName = "Hello charP"; string InitTest::stringName = string("Hello string"); # endif ----------- compile this into libInitTest.so xy.C ------------ #define EXTERN_MAIN 1 .... // Runs fine: cout << "C++: the charName=" << InitTest::charName << endl; // Sig 11 - core dump: cout << "C++: the stringName=" << InitTest::stringName << endl; ... ------------ compile this into xy.so xy.C is run by a Java JVM using JNI. Looking into the .so libs: --------------------- nm -o *.so | grep charName libxy.so:00028910 D _8InitTest.charName libxy.so:0001bf60 t _GLOBAL_.D._8InitTest.charName libxy.so:0001bf30 t _GLOBAL_.I._8InitTest.charName nm -o *.so | grep stringName libxy.so:0002d4c8 B _8InitTest.stringName -------------------- The "string" class is never initialized whereas the char* acts as expected! Why? Why is there no entry in libInitTest.so? What do i have to change to get this running? thanks for any help, Marcel -- Marcel Ruff mailto:ruff@swand.lake.de http://www.lake.de/home/lake/swand/ http://www.xmlBlaster.org