This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: GCJ Swing/AWT working on OS X -- article
On Jul 21, 2004, at 9:01 PM, Bryce McKinlay wrote:
John Gabriele wrote:
Thanks Bryce.
Should I be adding a '-l' arg to my build command line?
(note, my gnome-related libs are in ~/src/gnome/objdir/lib)
Hmm... here's what that gets me:
~/temp/gcj_stuff $ gcj -o baz --main=TestAWT -l
~/src/gnome/objdir/lib TestAWT.java
/usr/bin/ld: can't locate file for: -l/Users/john/src/gnome/objdir/lib
collect2: ld returned 1 exit status
Normally, libgcj will look for the toolkit classes in a file called
lib-gnu-java-awt-peer-gtk.so (.dylib on OS X) in your LD_LIBRARY_PATH
(DYLD_LIBRARY_PATH on OS X).
So, try setting DYLD_LIBRARY_PATH to point to the directory containing
lib-gnu-java-awt-peer-gtk.dylib. If that doesn't work, it is possible
that the library loading mechanism that libgcj uses is not working
correctly on OS X.
Regards
Bryce
Thanks for the reply Bryce.
Well, I've got gcc installed in /usr/local/gcc_cvs, and I had set
DYLD_LIBRARY_PATH to /usr/local/gcc_cvs/lib and had *not* set CLASSPATH,
so I think I was already doing what you suggest:
~/temp/gcj_stuff $ ls /usr/local/gcc_cvs/lib/lib*awt*
/usr/local/gcc_cvs/lib/lib-gnu-java-awt-peer-gtk.6.0.0.dylib*
/usr/local/gcc_cvs/lib/lib-gnu-java-awt-peer-gtk.dylib@
/usr/local/gcc_cvs/lib/lib-gnu-java-awt-peer-gtk.6.dylib@
/usr/local/gcc_cvs/lib/lib-gnu-java-awt-peer-gtk.la*
~/temp/gcj_stuff $ echo $CLASSPATH
~/temp/gcj_stuff $ echo $DYLD_LIBRARY_PATH
/usr/local/gcc_cvs/lib
~/temp/gcj_stuff $ ls
TestAWT.java
~/temp/gcj_stuff $ gcj -o baz --main=TestAWT TestAWT.java
/usr/bin/ld: warning multiple definitions of symbol _sqrt
/usr/local/gcc_cvs/lib/gcc/powerpc-apple-darwin7.4.0/3.5.0/../../../
libgcj.dylib(libgcj.6.0.0.dylib-master.o) definition of _sqrt
/usr/lib/libm.dylib(sqrt970.o) definition of _sqrt
~/temp/gcj_stuff $ ls -l
total 344
-rw-r--r-- 1 john john 14126 21 Jul 18:47 TestAWT.java
-rwxr-xr-x 1 john john 156620 21 Jul 21:17 baz*
~/temp/gcj_stuff $ ./baz
Exception in thread "main" java.awt.AWTError: Cannot load AWT toolkit:
gnu.java.awt.peer.gtk.GtkToolkit
<<No stacktrace available>>
Caused by: java.lang.ClassNotFoundException:
gnu.java.awt.peer.gtk.GtkToolkit not found in [file:./, core:/]
<<No stacktrace available>>
Does /usr/local/gcc_cvs/share/java/libgcj-3.5.0.jar internally make use
of /usr/local/gcc_cvs/lib/lib-gnu-java-awt-peer-gtk.6.0.0.dylib ?
Note: OS X comes with otool (rather than ldd), but unfortunately I
can't do this:
~/temp/gcj_stuff $ otool -L
/usr/local/gcc_cvs/share/java/libgcj-3.5.0.jar
/usr/local/gcc_cvs/share/java/libgcj-3.5.0.jar: is not an object file
You mentioned:
Odd. For some reason the compiled versions of the Gtk AWT peer classes
couldn't be found. By putting them on the classpath, you'll be running
interpreted bytecode, not natively compiled code. This will reduce
performance.
How can I tell when I'm running natively compiled code vs. when I'm
running interpreted bytecode?
~/temp/gcj_stuff $ export
CLASSPATH=/usr/local/gcc_cvs/share/java/libgcj-3.5.0.jar
~/temp/gcj_stuff $ gcj -o baz2 --main=TestAWT TestAWT.java
/usr/bin/ld: warning multiple definitions of symbol _sqrt
/usr/local/gcc_cvs/lib/gcc/powerpc-apple-darwin7.4.0/3.5.0/../../../
libgcj.dylib(libgcj.6.0.0.dylib-master.o) definition of _sqrt
/usr/lib/libm.dylib(sqrt970.o) definition of _sqrt
~/temp/gcj_stuff $ ls -l
total 344
-rw-r--r-- 1 john john 14126 21 Jul 18:47 TestAWT.java
-rwxr-xr-x 1 john john 156620 21 Jul 21:40 baz2*
~/temp/gcj_stuff $ otool -L baz2
baz2:
/usr/local/gcc_cvs/lib/libgcc_s.1.0.dylib (compatibility
version 1.0.0, current version 1.0.0)
/usr/local/gcc_cvs/lib/libgcj.6.dylib (compatibility version
7.0.0, current version 7.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0,
current version 71.1.1)
/usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current
version 5.0.0)
/usr/lib/libmx.A.dylib (compatibility version 1.0.0, current
version 47.0.0)
~/temp/gcj_stuff $ ./baz2
false
true
-- listing properties --
path.separator=:
java.vm.name=GNU libgcj
awt.toolkit=gnu.java.awt.peer.gtk.GtkToolkit
java.vm.specification.name=Java(tm) Virtual Machine Specification
java.home=/usr/local/gcc_cvs
java.vm.specification.version=1.0
line.separator=
java.vm.specification.vendor=Sun Microsystems Inc.
gnu.classpath.home.url=file:///usr/local/gcc_cvs/lib
gnu.gcj.progname=./baz2
java.specification.version=1.3
java.library.path=
gnu.classpath.vm.shortname=libgcj
java.class.version=46.0
java.specification.name=Java(tm) Platform API Specification
os.version=7.4.0
gnu.classpath.home=/usr/local/gcc_cvs
user.home=/Users/john
file.encoding=US-ASCII
os.name=Darwin
user.name=john
java.class.path=/usr/local/gcc_cvs/share/java/libgcj-...
java.io.tmpdir=/tmp
os.arch=Power Macintosh
java.fullversion=GNU libgcj 3.5.0 20040718 (experimental)
user.language=en
java.specification.vendor=Sun Microsystems Inc.
user.dir=/Users/john/temp/gcj_stuff
java.vm.info=GNU libgcj 3.5.0 20040718 (experimental)
java.version=3.5.0
java.ext.dirs=/usr/local/gcc_cvs/share/java/ext
sun.boot.class.path=/usr/local/gcc_cvs/share/java/libgcj-...
java.vm.vendor=Free Software Foundation, Inc.
java.vendor.url=http://gcc.gnu.org/java/
java.vendor=Free Software Foundation, Inc.
file.separator=/
java.vm.version=3.5.0 20040718 (experimental)
gnu.cpu.endian=big
user.region=US
Thanks for any insights,
---J