UnsatisfiedLinkError while loading library using System.loadLibrary

Discussion in 'Java' started by ratheesh.pai, Nov 24, 2006.

  1. ratheesh.pai

    ratheesh.pai Guest

    I am facing a issue while trying to load a library using

    Sample Code:

    public static void main(String[] args) {


    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
    ratheesh.pai, Nov 24, 2006
    1. Advertisements

  2. 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,

    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 Beaton, Nov 24, 2006
    1. Advertisements

  3. ratheesh.pai

    Nigel Wade Guest

    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

    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.
    Nigel Wade, Nov 24, 2006
  4. ratheesh.pai


    Nov 18, 2016
    Likes Received:

    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

    varshasavant2002, Nov 18, 2016
    1. Advertisements

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 (here). After that, you can post your question and our members will help you out.