From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcel Ruff To: gcc , "H . J . Lu" Subject: Re: Static initializer in shared libraries on Linux #2 Date: Mon, 17 Sep 2001 01:00:00 -0000 Message-id: <3BA5AD84.2040209@swand.lake.de> References: <3BA4A6A2.5040003@swand.lake.de> X-SW-Source: 2001-09/msg00650.html > H . J . Lu wrote: > Please provide a small, complete testcase. Here it is: testCpp.zip contains ./testCpp/InitTest.C ./testCpp/xy.C ./testCpp/compile.sh ./testCpp/CppCaller.java (The zip is 1873 bytes, i hope it is OK to send to your mailing list) If you run the simple shell script on Linux ./compile.sh it creates two shared libraries, an executable xy.exe (which runs fine) and compiles the java file (which fails on running). thanks Marcel Marcel Ruff wrote: > 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