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