This is the mail archive of the java@gcc.gnu.org mailing list for the Java 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]

Re: libgcj failure: Duplicate class registration


Tom Tromey wrote:

">" == hannes wallnoefer <hannes@helma.at> writes:


I'm getting the following error message when adding a java class to a
dynamically linked Apache module:
libgcj failure: Duplicate class registration: GcjTest



With the current gcj, a given compiled class can only be loaded once by the system class loader. If you try to link in a class more than once, you get this failure.

This choice was the result of a lot of discussion a few years ago, see
the list archives for the details.  (I don't have a ready pointer to
the thread, sorry.)



#19 0x401576ed in apr_dso_load () from /usr/lib/libapr-0.so.0
#20 0x08066c5d in load_module ()


Any idea what might be wrong?



Offhand it is hard to say. I've run into this problem by accidentally pulling in a second (different) copy of libgcj.so. I worked around it by setting the system property gnu.gcj.runtime.VMClassLoader.library_control to `never'. This disables the automatic loading of .so files.




I found that the problem is Apache is calling dlopen() twice for each shared module. This is done on purpose to let modules set up their logs files or whatever. So I guess the only solution is to put the Java classes in a separate library and load that manually from my module. Unless there is a way to "forget" about the classes loaded in the first dlopen() pass, but I somehow doubt this.


Hannes




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