Re: libgcj problem in FindClass with shared libraries.
Andrew Haley <[email protected]>
| Newsgroups | gmane.comp.gcc.java.devel |
|---|---|
| Message-ID | <[email protected]> |
abhishek desai wrote: > I am using libgcj version 3.4.6 (I have to use this version of gcc and > libgcj) . Well, we can't fix it. It is ancient history. > I have shared libraries with precompiled java clases and am > using JNI function call "(*env)->FindClass" to get the class. Tracing > through the _Jv_JNI_FIndClass I found that the dynamic library gets > loaded but the symbols are not loaded into the cache. > > In the function call "jclass > gnu::gcj::runtime::VMClassLoader::findClass (jstring name)" > there is a call to "jboolean java::lang::Runtime::loadLibraryInternal > (jstring lib)" . This does the loading of the library by eventually > calling dlopen in libtdl. > > After this call there is no call to access the symbol from the library > or to load it to the cache. > But the symbol is searched for in the cache using _Jv_FindClassInCache > which returns NULL. Is this a bug or I am missing something ? Need > help with getting the symbols loaded. You need to make sure that _Jv_RegisterClasses is being called when the shared library is loaded. If it is, then the classes in the library will be found; if not, then you need to find out why not. Put a breakpoint on _Jv_RegisterClasses. You should see it called once at startup, again when libgcj.so is loaded, and each time a shared library is loaded. Andrew.