¿Cómo manejar java.lang.UnsatisfiedLinkError en Java?

Java.lang.UnsatisfiedLinkError es una subclase de la clase LinkageError. Cuando Java Virtual Machine (JVM) no encuentra el método que se declara como «nativo», arrojará el UnsatisfiedLinkError. 

Ahora analicemos cuándo y por qué ocurre. Java.lang.UnsatisfiedLinkError ocurre durante la compilación del programa. Es por la razón por la que el compilador no encontró la biblioteca nativa, una biblioteca que contiene código nativo que significa solo para un sistema operativo específico, biblioteca nativa como .dll en Windows, .so en Linux y .dylib en Mac. La jerarquía de este error es como la que se muestra a continuación:

Java.lang.Object
    Java.lang.Throwable
        Java.lang.Error
            Java.lang.LinkageError
                Java.lang.UnsatisfiedLinkError

Ejemplo

Java

// Java Program to Illustrate UnsatisfiedLinkError
  
// Importing input output classes
import java.io.*;
  
// Main class
public class GFG {
  
    // Loading the External Library
    //"libfile" is name of C file
    static {
        System.loadLibrary("libfile");
    }
  
    //Method 1
    // To define externally in C file
    native void cfun();
  
    // Method 2
    // Main driver method
    public static void main(String[] args) {
        // Creating the object of above class inside main()
        GFG g = new GFG();
  
        // Calling over the above method
        g.cfun();
    }
}

Producción:

Como se vio arriba ahora para manejar este error, debemos asegurarnos de que la RUTA debe contener el archivo «DLL» dado en Windows. También podemos verificar si java.library.path está configurado o no. Si estamos ejecutando el archivo java usando el símbolo del sistema en Windows, podemos usar Java -Djava.library.path=”NAME_OF_THE_DLL_FILE” -jar <JAR_FILR_NAME.jar> para ejecutar nuestro archivo java. Otra cosa que podemos usar es dar la ubicación exacta del archivo en el método System.LoadLibrary («Ruta exacta del archivo») o System.load («Ruta exacta del archivo»).

Ejemplo

Java

// Java Program to Resolve UnsatisfiedLinkError by
// considering C file where native function is defined
  
// Importing input output classes
import java.io.*;
  
// Main class
public class GFG {
  
    // Loading the External Library
    // "libfile" is name of C file
    static
    {
        System.load(
            "C:/Users/SYSTEM/Desktop/CODES/libfile.dll");
    }
  
    // Method 1
    // Defined externally in C file
    native void cfun();
  
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an object of class inside main()
        GFG g = new GFG();
  
        // Calling the above object
        g.cfun();
    }
}

Salida: cuando ejecutamos el archivo java anterior, se compilará correctamente y mostrará la salida.

Hello from C file

Nota:

Generaremos el archivo .dll a partir de este archivo C usando el comando- ‘ gcc cfile.c -IC:/Program Files/Java/jdk1.8.0_111/include -IC:/Program Files/Java/jdk1.8.0_111/ include/win32 -shared -o cfile.dll ‘. Ahora, cuando ejecutemos el archivo java anterior, se compilará con éxito y mostrará la salida.

Publicación traducida automáticamente

Artículo escrito por atulranaji19971 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *