Java.lang.UnsatisfiedLinkError é uma subclasse da classe LinkageError. Quando a Java Virtual Machine (JVM) não encontrou o método que é declarado como “nativo”, ele lançará o UnsatisfiedLinkError. 

Agora vamos discutir quando e por que isso ocorre. Java.lang.UnsatisfiedLinkError ocorre durante a compilação do programa. É por isso que o compilador não encontrou a Biblioteca Nativa, uma Biblioteca que contém código nativo que significava apenas para um sistema operacional especificado, uma biblioteca Nativa como .dll no Windows, .so no Linux e .dylib no Mac. A hierarquia desse erro é como a fornecida a seguir:

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

Exemplo

// 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();
    }
}

Saída:

Como visto acima agora, para lidar com esse erro, precisamos ter certeza de que o PATH deve conter o arquivo “DLL” fornecido no Windows. Também podemos verificar se java.library.path está definido ou não. Se estivermos executando o arquivo java usando o Prompt de comando no Windows, podemos usar o Java -Djava.library.path = ”NAME_OF_THE_DLL_FILE” -jar <JAR_FILR_NAME.jar> para executar nosso arquivo java. Outra coisa que podemos usar é fornecer a localização exata do arquivo no método System.LoadLibrary (“Caminho de arquivo exato”) ou System.load (“Caminho de arquivo exato”).

Exemplo

// 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();
    }
}

Saída: Quando executamos o arquivo java acima, ele será compilado com sucesso e exibirá a saída.

Hello from C file

Observação:

Iremos gerar o arquivo .dll a partir deste arquivo C usando o comando- ' gcc cfile.c -IC: / Arquivos de programas / Java / jdk1.8.0_111 / include -IC: / Arquivos de programas / Java / jdk1.8.0_111 / incluir / win32 -shared -o cfile.dll '. Agora, quando executarmos o arquivo java acima, ele será compilado com sucesso e exibirá a saída.