An IllegalAccessError is thrown from within commons-logging during Tomcat startup. It happens because an anonymous inner class of o.a.c.l.impl.LogFactoryImpl attempts to access a protected method of o.a.c.l.impl.LogFactoryImpl's parent class. I'm not sure whether libgcj is doing the right thing here: jcf-dump shows the inner class's superclass as java.lang.Object so by rights it shouldn't be able to access the protected method that it is trying to. However, I don't know whether inner classes have special rights (I'm guessing not) or whether they should be compiled with their containing class as their superclass. Need to find a Java god to ask about this one...
This seems to be a bytecode generation issue, since it vanished when I fixed the thing that was stopping us from using the shared objects.