LibGCJ static linking trouble

Thomas Womack twomack@globalphasing.com
Thu Nov 16 15:08:00 GMT 2006


Hello.
Using gcc instead of gcj for the final link has produced an executable 
with no run-time dependency on libgcj, and reminded me to go and get my 
eyeglass prescription checked, but I've now run into another problem:
Unhandled Java exception:
java.lang.ExceptionInInitializerError
 at java.lang.Class.initializeClass(MakeTNT)
 at gnu.regexp.RE.getLocalizedMessage(MakeTNT)
 at gnu.regexp.RESyntax.<clinit>(MakeTNT)
 at java.lang.Class.initializeClass(MakeTNT)
 at java.util.regex.Pattern.<init>(MakeTNT)
 at java.util.regex.Pattern.compile(MakeTNT)
 at java.util.regex.Pattern.compile(MakeTNT)
 at java.util.regex.Pattern.matches(MakeTNT)
 at java.lang.String.matches(MakeTNT)
 at ...
Caused by: java.util.MissingResourceException: Bundle 
gnu/regexp/MessagesBundle not found
 at java.util.ResourceBundle.getBundle(MakeTNT)
 at java.util.ResourceBundle.getBundle(MakeTNT)
 at gnu.regexp.RE.<clinit>(MakeTNT)
 at java.lang.Class.initializeClass(MakeTNT)
I can see what's happening here - it's looking for translations of some 
kind and not finding them - but I don't quite understand why. I'm using a 
locally-compiled version of gcc-4.1.1 if that's relevant.
I found this problem reported as 
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=327411
with a proposed workaround of copying 
[gccdir]/gcc-4.1.1/libjava/classpath/resource/gnu/regexp/MessagesBundle.properties 
as gnu/regexp/MessagesBundle.properties under the directory the executable 
is in.
When I do that, the executable works fine provided I'm in the directory 
it's in:
> cd ~/toadfarm/bin/linux
> ./MakeTNT -auto ~/Desktop/monster.lib -o ~/s
 [success]
but
> cd [anywhere else]
> ~/toadfarm/bin/linux/MakeTNT -auto ~/Desktop/monster.lib -o ~/s2
gives the error at the start of my message.
strace indicates that MakeTNT is trying to find (in succession)
gnu/regexp/MessagesBundle_en_GB.properties
gnu/regexp/MessagesBundle_en.properties
gnu/regexp/MessagesBundle.class
gnu/regexp/MessagesBundle.properties
under the directory I'm currently in.
Is there an environment variable to deal with this? I've poked around 
http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html a 
bit, but get referred back (under documentation for 
java.lang.ClassLoader.getResource) to implementation-specific details like 
'Class loader implementations should override this method to specify where 
to find resources'.
Many thanks in advance for your help,
Thomas Womack, Global Phasing Ltd.


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /