JNI - compilando - erro

1 resposta
D

Já pesquisei por aqui, ví um tópico parecido mas não solucionou meu problema.

Estou tentando fazer uma integração do JNI onde meu arquivo .c faz uma referência a um objeto ( .o ), tentando compilar da seguinte forma:
gcc -o libLiberar.so -shared -Wl,-soname,libLiberar.so -I/usr/lib/jvm/java-6-sun-1.6.0.24/include/ -I/usr/lib/jvm/java-6-sun-1.6.0.24/include/linux Liberar.c -static -lc

Mas, junto, eu preciso enviar mais dois objetos:
Obj1.o e Obj2.o

Como posso fazer isso? aqui quando não aparece mensagem de erro na hora de executar aparece o seguinte:

Exception in thread main java.lang.UnsatisfiedLinkError: no Liberar in java.library.path

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)

at java.lang.Runtime.loadLibrary0(Runtime.java:823)

at java.lang.System.loadLibrary(System.java:1028)

at Liberar.(Liberar.java:5)

Could not find the main class: Liberar.  Program will exit.

1 Resposta

matheuslmota

No seu código java, carregue Liberar da seguinte forma:

static{ System.Load("C:\caminho completo\Liberar.so"); }

Você deve ter tentado carregar da seguinte forma:

static{ System.LoadLibrary("Liberar"); }

Quando você faz dessa forma, o java supõe que a biblioteca que você está tentando carregar está nos paths padrões do Java (use System.getProperty(“java.library.path”) para obter a lista dos paths do JAva). Da forma que eu mostrei, o Java irá carregar a biblioteca a partir do caminho passado (observe que nesse caso você deve passar o nome da bibilioteca com a extensão).

Esse erro, UnsatisfiedLinkError, ocorre em duas situações.

  1. a biblioteca não foi localizada;
  2. a biblioteca não possui a função que está sendo chamada pelo Java.

Para evitar a segunda possibilidade, ao gerar sua classe Java e compilá-la, chame, no prompt de comando, a seguinte linha de código:

javah -jni SuaClasse

Onde SuaClasse é o nome da classe compilada sem o .class. Ao fazer isso, você vai obter um arquivo .h que deve ser usado na implementação dos métods nativos. Isso evita que você venha a gerar um arquivo .h com a sintaxe errada, caso for fazer na mão.

Criado 25 de agosto de 2011
Ultima resposta 26 de ago. de 2011
Respostas 1
Participantes 2