Olá pessoal,
Estou precisando de ajuda novamente, dessa vez com o java. Fugi do Netbeans antes, mas agora não vai ter jeito. Tenho que integrar meu código C++ num projeto java que está pronto no Netbeans.
Meu código funciona na chamada via terminal, mas no Netbeans dá erro:
“Exception in thread “main” java.lang.UnsatisfiedLinkError: teste.JSensor.openSensor()V
at teste.JSensor.openSensor(Native Method)
at teste.Teste.main(Teste.java:21)”
Já li muita coisa do google sobre o erro, mas nada me resolveu o problema. E deve ser algo bobo que está causando isso, mas como não tenho pratica nenhuma com java e pouca com linux, estou apanhando pra resolver.
O sistema está estruturado da seguinte maneira:
1- Tenho um .h e um libsensor.so, que veio com o sensor.
2- Criei um CSensor.cpp e CSensor.h com a manipulação do sensor;
3- Criei um JSensor.cpp pra servir de “espelho” das funções java, com as chamadas para as funções escritas no CSensor.cpp
4- Criei o JSensor.java
5- Criei o JSensor.h usando o javah
6- Compilei o JSensor.cpp (g++ -Wall -shared -fPIC -o libJSensor.so JSensor.cpp -pthread -std=c++11)
7- Copiei o .so gerado e colei na pasta onde está o código java e o .h do javah
8- Compilei o java
9- Executei usando -Djava.library.path="/home/meunome/JAVA" como parâmetro
Desse jeito funciona.
Agora no netbeans…
Abri um projeto novo, e em “Propriedades -> Bibliotecas” adicionei um .jar gerado com os arquivos acima (java e .so), mas deu o erro.
Adicionei o.so na pasta /lib e /usr/lib, mas não mudou nada.
Apaguei a biblioteca jar e criei uma classe dentro do próprio projeto com o código copiado do arquivo java que gerou o jar, e o erro não mudou.
Configurei para o projeto usar uma pasta de bibliotecas compartilhadas e coloquei os códigos lá dentro, e nada.
Até tentei jogar o libJSensor.so dentro da raiz do projeto e da pasta src.
Não sei mais o que fazer.
Sei que o código feito por mim e o JNI está ok, porque funciona via terminal
Alguém sabe dizer o que estou fazendo errado?
Abs.