Building shared objects with gcj on osx
Andi Vajda
andi@osafoundation.org
Fri Mar 4 19:00:00 GMT 2005
> I have a successful bootstrap build of 3.4.3 on os 10.2.8. When trying to
> build shared objects, I am receiving link errors:
>> bash-2.05a$ cat ./Test.java public class Test {
>> public static void main (String [] argsv) {
> System.out.println ("Hello World");
> }
>> }
> bash-2.05a$ gcj -o helloworld --main=Test Test.java
> bash-2.05a$ ./helloworld
> Hello World
> bash-2.05a$ gcj -shared -o helloworld.so Test.java
> /usr/bin/ld: Undefined symbols:
> _main
> ___eprintf
> collect2: ld returned 1 exit status
> bash-2.05a$
> The link error on "main" makes me suspicous - I presumed using -shared meant
> that no main was required?
I use both -shared -bundle and it seems to work for the python extension I'm
building. I also used these flags at times:
-undefined suppress -flat_namespace -multiply_defined suppress
> I am fully aware I may be missing something obvious, and welcome any (helpful
> :) critism on how to get this working.... is it possible that weirdness is
> happening as OSX's /usr/bin/ld is used?
There can be but so far I've been able to work around it.
> I have seen many messages on problems building native SWT/SwingWT on OSX,
> which I am attempting - the Makefile in SwingWT for SWT uses the same flags I
> have (although also tries to link in various jnilibs, in error I think). This
> is what has led me to the problem of getting -shareds working on osx.... any
> ideas?
JNI libs built against the Apple JDK, ie with the Apple JDK jni.h, are not
compatible with gcj's jni.h. Also, for what it's worth, the extension of JNI
libs built with Apple's JDK are .jnilib and with gcj are .dylib. What that
means I don't know but I've not been able to get libgcj's LoadLibrary API to
work otherwise.
Andi..
More information about the Java
mailing list