Date: Thu, 6 Mar 2003 11:07:08 +0200 From: Sheldon Hearn <sheldonh@starjuice.net> To: freebsd-java@FreeBSD.org Subject: Native jdk1.4.1 JNI problem with Eclipse IDE Message-ID: <20030306090708.GY60356@starjuice.net>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Hi folks,
Wow! The native jdk1.4.1_p3 labour of love has produced something quite
amazing. Performance-wise, this thing kicks butt with respect to
jdk1.3.1_pre8, and it seems as stable as I need it to be.
It seems, however, that there may be a problem with its JNI.
I've been in contact with James Flemer, who is maintaining a native
Eclipse port outside the FreeBSD ports tree. I intend to commit that
port once it works for me with our native jdk1.4.1_pX.
When built and run from James' port with jdk1.3.1_p8, Eclipse works
brilliantly. When built and run from James' port with jdk1.4.1_p3,
Eclipse fails to start, throwing a java.lang.UnsatisfiedLinkError
exception.
I don't have any problems with NetBeans (other than personal disgust),
but then it doesn't use JNI (as far as I can tell).
The port tarball used to build Eclipse with jdk1.4.1_p3 is attached as
eclipse-gtk.tgz.
Note that you have to edit USE_JAVA, setting it to 1.4 or 1.4+. This
requires a patch to bsd.java.mk, which I've also attached.
Launching eclipse results in a controlled crash, leaving the following
output in its logfile (~/workspace/.metadata/.log):
!SESSION ----------------------------------------------------------------------
!ENTRY org.eclipse.core.launcher 4 0 Mar 06, 2003 02:28:58.134
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.eclipse.core.launcher.Main.basicRun(Main.java:247)
at org.eclipse.core.launcher.Main.run(Main.java:703)
at org.eclipse.core.launcher.Main.main(Main.java:539)
Caused by: java.lang.reflect.InvocationTargetException
at org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoader.java:848)
at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461)
... 7 more
Caused by: java.lang.UnsatisfiedLinkError: /usr/local/eclipse-gtk/plugins/org.eclipse.swt.gtk/os/linux/x86/libswt-pi-gtk-2130.so: /usr/local/eclipse-gtk/plugins/org.eclipse.swt.gtk/os/linux/x86/libswt-pi-gtk-2130.so: Undefined symbol "main"
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1473)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1381)
at java.lang.Runtime.loadLibrary0(Runtime.java:788)
at java.lang.System.loadLibrary(System.java:832)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:104)
at org.eclipse.swt.internal.gtk.OS.<clinit>(OS.java:19)
at org.eclipse.swt.widgets.Display.createDisplay(Display.java:443)
at org.eclipse.swt.widgets.Display.create(Display.java:430)
at org.eclipse.swt.graphics.Device.<init>(Device.java:107)
at org.eclipse.swt.widgets.Display.<init>(Display.java:299)
at org.eclipse.swt.widgets.Display.<init>(Display.java:295)
at org.eclipse.ui.internal.Workbench.run(Workbench.java:1230)
at org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoader.java:845)
... 8 more
I tried to get into this with jdb, but alas, it was not to be. I start
the process with
$ /usr/local/jdk1.4.1/bin/jdb \
-Xdebug -Xnoagent \
-Xrunjdwp:transport=dt_socket,address=2112,server=y,suspend=y \
-classpath \
/usr/local/eclipse-gtk/startup.jar \
org.eclipse.core.launcher.Main \
-os linux -ws gtk -arch x86
but when I attach to it with the debugger and "run", ktrace just shows
the process spinning on poll() and gettimeofday().
So now I'm out of my depth. Actually, I was out of my depth a few
paragraphs ago. Any ideas? :-)
Ciao,
Sheldon.
[-- Attachment #2 --]
Gf>