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