help with pre-compiled classloading

Vladimir vlad666@gmx.de
Tue Dec 19 21:02:00 GMT 2006


Hello,
I need a little help. I cannot manage it to pre-compile separate .class 
files in separate .so objects in a way that it works. Is that generally 
possible?
Here is a little test-scenario:

I have made a small program with 3 sources: HelloWorld.java, 
MyClass.java and pkg/MyOtherClass.java
In this program HelloWorld instantiates MyClass, and MyClass 
instantiates pkg.MyOtherClass.

First I have compiled everything with:     'javac HelloWorld.java'
Then I've created a pre-compiled lib-MyClass.so with:     'gcj -shared 
-o lib-MyClass.so MyClass.class'
and removed after that MyClass.class, to be sure if MyClass is loaded 
then it comes from the shared object.
Now I try to start it all:     'gij -verbose:class 
-Dgnu.gcj.runtime.VMClassLoader.library_control=full 
-Djava.library.path=. HelloWorld'
and gij exits with java.lang.ClassNotFoundException: MyClass not found 
in gnu.gcj.runtime.SystemClassLoader

Ookay, because I know that MyClass instantiates MyOtherClass, I have 
linked them both in a shared lib: 'gcj -shared -o lib-MyClass.so 
MyClass.class pkg/MyOtherClass.class'
And now gij works fine ... :
    ...
    [Loaded (bytecode) HelloWorld from (file:/.../mydir/ <no certificates>)]
    [Loaded (pre-compiled) MyClass from <no code source>]
    [Loaded (pre-compiled) com.MySecondClass from <no code source>]

So I thought, aaah once loading a precompiled class from a .so any other 
class it needs on it's reachability tree shall also be precompiled?
Probably I could make separate shared objects for MyClass and 
MyOtherClass, put them in the same java.library.path and everything will 
be alright?
But indeed, the same java.lang.ClassNotFoundException as above occurs!

This would mean now, that when loading a pre-compiled class, gij needs 
all other referenced classes explicitely to be linked within the same 
shared object? Is it possible to let gcj do this automatically? Anyway, 
gcj has to access all referenced classes (here pkg.MyOtherClass.class) 
when compiling (MyClass).
Or did I just miss something?

Regards,
Vladimir



More information about the Java mailing list