Lib linking error
Closed this issue · 5 comments
GoogleCodeExporter commented
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
GoogleCodeExporter commented
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
GoogleCodeExporter commented
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
GoogleCodeExporter commented
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
GoogleCodeExporter commented
Original comment by danjaredg
on 31 Mar 2014 at 5:19
- Changed state: NotError
GoogleCodeExporter commented
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