UnsatisfiedLinkError while loading library using System.loadLibrary

R

ratheesh.pai

I am facing a issue while trying to load a library using
System.loadLibrary

Sample Code:

public static void main(String[] args) {
System.loadLibrary("xxx")

}

Throws the Exception:

libxxx.so: undefined symbol: yyyyy

The libxxx.so file is present in $LD_LIBRARY_PATH
Platform: Red-Hat Linux
JAVA version: 1.5

The file yyyyy.o is contained in some other archive files. I do not
want to include this .o in this library libxxx.so. How to tell JVM
about the location of this .o (inside a .a file) while it loads the
libxxx.so library

Has anyone ever faced a similar problem, or has any clues regarding
this problem as to how to fix this
 
G

Gordon Beaton

libxxx.so: undefined symbol: yyyyy

The libxxx.so file is present in $LD_LIBRARY_PATH
Platform: Red-Hat Linux
JAVA version: 1.5

System.loadLibrary() didn't fail. It was your attempt to invoke the
non-existing function that caused the exception.

If the missing symbol is in libyyy.so then your libxxx.so is dependent
on libyyy.so, and you need to specify that when you link libxxx.so,
i.e.:

gcc -shared -f libyyy.so x.o -o libxxx.so

Also, libyyy.so must be in LD_LIBRARY_PATH at runtime.

Use "readelf -d libxxx.so" to check that there is NEEDS entry
mentioning libyyy.so. Use "ldd -v libxxx.so" to confirm that it can be
resolved at runtime.

/gordon
 
N

Nigel Wade

I am facing a issue while trying to load a library using
System.loadLibrary

Sample Code:

public static void main(String[] args) {
System.loadLibrary("xxx")

}

Throws the Exception:

libxxx.so: undefined symbol: yyyyy

The libxxx.so file is present in $LD_LIBRARY_PATH
Platform: Red-Hat Linux
JAVA version: 1.5

The file yyyyy.o is contained in some other archive files. I do not
want to include this .o in this library libxxx.so. How to tell JVM
about the location of this .o (inside a .a file) while it loads the
libxxx.so library

Has anyone ever faced a similar problem, or has any clues regarding
this problem as to how to fix this

Your criteria are mutually exclusive. You either link libxxx.so against the
other archive (and include the object in libxxx.so) or you are doomed to
failure.

There is no way to make an executable retrieve an object from an archive file.
The object must be included in the executable, or one of the DSOs it loads.
Since there is no way to modify the java executable to include the object in
that, your only choice is to include it in your DSO.
 
Joined
Nov 18, 2016
Messages
4
Reaction score
0
Hello,

I am also facing similar issue .

Trying to migrate application from JBoss to tomcat8 .
We are using a .so native lib for a specific functionality .

Everytime this function is called we need to load .so file but it throws error :
Native code library failed to load. java.lang.UnsatisfiedLinkError:

I have tried multiple things
1. set -Djava.library.path = XX folder path of native lib explicitly through tomcat VM argument
2. copy xxx.so file to /usr/lib/ folder and give the -Djava.library.path= /usr/lib
3. Also tried installing tomcat-APR and tomcat-Native libraries
4. Tried to Load file using below line to check where native lib is getting loaded or not
System.loadLibrary(so filename );

5.Tried settign export LD_LIBRARY_PATH=/usr/local/apr/lib

But NO LUCK :(:(

Please someone help with this .
Why my xxx.so file is not getting loaded


-Varsha
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,007
Latest member
OrderFitnessKetoCapsules

Latest Threads

Top