rilian-la-te/java-swing-ayatana

Lib linking error

Closed this issue · 5 comments

What steps will reproduce the problem?
1. Compile jayatana
2. Compile jayatanatest
3. set JAVA_TOOL_OPTIONS=-javaagent:/usr/share/java/jayatanaag.jar
4. run java com.jarego.jayatana.test.Swing
5. get error:

Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382)
        at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:397)
Caused by: java.lang.UnsatisfiedLinkError: /usr/lib/libjayatanaag.so: 
libjawt.so: cannot open shared object file: No such file or directory
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1851)
        at java.lang.Runtime.load0(Runtime.java:795)
        at java.lang.System.load(System.java:1062)
        at com.jarego.jayatana.Agent.premain(Unknown Source)
        ... 6 more
FATAL ERROR in native method: processing of -javaagent failed

Expected result:
Running example app with globalmenu.

/usr/lib % ldd libjayatanaag.so
        linux-gate.so.1 (0xb7796000)
        libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0xb75fb000)
        libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb75a8000)
        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb7476000)
        libdbusmenu-glib.so.4 => /usr/lib/libdbusmenu-glib.so.4 (0xb7459000)
        libXt.so.6 => /usr/lib/libXt.so.6 (0xb73fa000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb72be000)
        libjawt.so => not found
        libpthread.so.0 => /lib/libpthread.so.0 (0xb72a2000)
        libc.so.6 => /lib/libc.so.6 (0xb70f6000)
        libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb70f0000)
        libz.so.1 => /lib/libz.so.1 (0xb70d9000)
        libresolv.so.2 => /lib/libresolv.so.2 (0xb70c2000)
        libffi.so.6 => /usr/lib/libffi.so.6 (0xb70ba000)
        libSM.so.6 => /usr/lib/libSM.so.6 (0xb70b1000)
        libICE.so.6 => /usr/lib/libICE.so.6 (0xb7096000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb7072000)
        libdl.so.2 => /lib/libdl.so.2 (0xb706d000)
        /lib/ld-linux.so.2 (0xb7797000)
        libuuid.so.1 => /lib/libuuid.so.1 (0xb7067000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb7063000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb705b000)

As we can see, libjawt.so and other java libs cannot be found despite the fact 
that they are present in the system:
/usr/lib % locate libjawt
/opt/oracle-jdk-bin-1.7.0.51/jre/lib/i386/libjawt.so

At buildtime gcc can build lib just fine:
gcc -O3 -Wall -DNDEBUG -I. 
-I/home/sidius/.gentoo/java-config-2/current-user-vm/include 
-I/home/sidius/.gentoo/java-config-2/current-user-vm/include/linux -pthread 
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include 
-I/usr/include/libdbusmenu-glib-0.4  
-L/home/sidius/.gentoo/java-config-2/current-user-vm/jre/lib/i386 -fPIC -c -o 
com_jarego_jayatana_Agent.o com_jarego_jayatana_Agent.c -lgio-2.0 -lgobject-2.0 
-lglib-2.0 -ldbusmenu-glib -lXt -lX11  -ljawt
gcc -O3 -Wall -DNDEBUG -I. 
-I/home/sidius/.gentoo/java-config-2/current-user-vm/include 
-I/home/sidius/.gentoo/java-config-2/current-user-vm/include/linux -pthread 
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include 
-I/usr/include/libdbusmenu-glib-0.4  
-L/home/sidius/.gentoo/java-config-2/current-user-vm/jre/lib/i386 -shared -o 
libjayatanaag.so com_jarego_jayatana_Agent.o -lgio-2.0 -lgobject-2.0 -lglib-2.0 
-ldbusmenu-glib -lXt -lX11  -ljawt


System: Gentoo Linux ~x86, KDE 4.12, Oracle JDK 1.7.0.51

Other Java apps can be used without any problems.

Original issue reported on code.google.com by sidius...@gmail.com on 25 Mar 2014 at 1:32

Update: if I use deb packages from your ppa test example runs fine. Menu is 
exported to the globalmenu but menu items don't work (nothing hapens on click). 
Submenus aren't working either.

What's the difference between compiling libs from svn (r236) and using compiled 
libs?

Original comment by sidius...@gmail.com on 25 Mar 2014 at 2:50

The library libjawt is loaded by JVM,

You need compile all proyects

You need aditional environment variable to test:

* Using only classes directories:

JAVA_TOOL_OPTIONS=-agentpath:${libjayatanaag}/libjayatanaag.so
JAYATANA_CLASSPATH=${jayatana}/target/classes
JAYATANA_LIBPATH=${libjayatana}/libjayatana.so

* Using Jar files with java agent, Java Agent doesn't support folder classpath 
only jar files

JAVA_TOOL_OPTIONS=-javaagent:${jayatanaag}/target/jayatanaag.jar
JAYATANA_CLASSPATH=${jayatana}/target/jayatana.jar
JAYATANA_LIBPATH=${libjayatana}/libjayatana.so


Original comment by danjaredg on 26 Mar 2014 at 5:28

In Java Agent mode I forgent another environment variable

JAYATANA_LIBAGPATH=${libjayatanaag}/libjayatanaag.so

Original comment by danjaredg on 26 Mar 2014 at 5:29

Original comment by danjaredg on 31 Mar 2014 at 5:19

  • Changed state: NotError
Thanks for a reply. So I set env variables according to you and tried to test 
the latest revision.

1) Agent mode

 % echo $JAVA_TOOL_OPTIONS
-javaagent:/home/sidius/2.0/jayatanaag/target/jayatanaag.jar
 % echo $JAYATANA_CLASSPATH
/home/sidius/2.0/jayatana/target/jayatana.jar
 % echo $JAYATANA_LIBPATH
/home/sidius/2.0/libjayatana/libjayatana.so
 % echo $JAYATANA_LIBAGPATH
/home/sidius/2.0/libjayatanaag/libjayatanaag.so
 % java com.jarego.jayatana.test.Swing
Picked up JAVA_TOOL_OPTIONS: 
-javaagent:/home/sidius/2.0/jayatanaag/target/jayatanaag.jar
JAYATANA_LIBAGPATH=/home/sidius/2.0/libjayatanaag/libjayatanaag.so
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382)
        at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:397)
Caused by: java.lang.UnsatisfiedLinkError: 
/home/sidius/2.0/libjayatanaag/libjayatanaag.so: libjawt.so: cannot open shared 
object file: No such file or directory
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1851)
        at java.lang.Runtime.load0(Runtime.java:795)
        at java.lang.System.load(System.java:1062)
        at com.jarego.jayatana.Agent.premain(Unknown Source)
        ... 6 more
FATAL ERROR in native method: processing of -javaagent failed
zsh: abort      java com.jarego.jayatana.test.Swing

2) Using classes:

 % echo $JAVA_TOOL_OPTIONS
-agentpath:/home/sidius/2.0/libjayatanaag/libjayatanaag.so
 % echo $JAYATANA_CLASSPATH
/home/sidius/2.0/jayatana/target/antclasses
~/2.0/jayatanatest/src/main/java % echo $JAYATANA_LIBPATH
/home/sidius/2.0/libjayatana/libjayatana.so
 % java com.jarego.jayatana.test.Swing
Picked up JAVA_TOOL_OPTIONS: 
-agentpath:/home/sidius/2.0/libjayatanaag/libjayatanaag.so
Error occurred during initialization of VM
Could not find agent library /home/sidius/2.0/libjayatanaag/libjayatanaag.so in 
absolute path, with error: libjawt.so: cannot open shared object file: No such 
file or directory


Original comment by sidius...@gmail.com on 31 Mar 2014 at 6:22