Como lidar com java.lang.UnsatisfiedLinkError em Java?
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.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva