Java Native Interface
Surgiu a necessidade de usar o JNI (Java Native Interface) e tive muita dificuldade para encontrar informações sobre o assunto. Então resolvi compartilhar o que aprendi sobre este assunto.
Parte 3: Exemplo de utilização do JNI
Para criar bibliotecas em código nativo será necessário instalar o JDK e o gcc. Seria bom também instalar o gcc-java caso queira usar o gcj para compilar o código Java.
Neste tópico vou mostrar um simples exemplo que utiliza o JNI.
Vamos criar um programa Java que vai declarar a função chamada getSoma, que receberá dois parâmetros e resultará a soma dos dois em forma de string.
Veja o código:
Para compilar:
javac exemplo1.java
Agora devemos gerar o arquivo exemplo1.h usando o aplicativo javah:
javah -jni exemplo1
Será gerado o arquivo de cabeçalho exemplo1.h com a declaração da função.
Veja o arquivo abaixo:
exemplo1.h:
Observe que o javah declarou a função com o padrão JNI. Os parâmetros int foram substituídos por jint e String substituído por jstring.
Agora devemos criar o arquivo exemplo1.cpp implementando esta função.
Vamos lá:
exemplo1.cpp:
Agora basta compilar o arquivo exemplo1.cpp:
g++ -fPIC -shared -o libexemplo1.so exemplo1.cpp
Este comando vai gerar o arquivo libexemplo1.so. Copie este arquivo para a pasta /usr/lib64 ou /usr/lib dependendo da sua distribuição Linux.
Para testar basta executar o programa exemplo1.class.
java exemplo1
Você deve obter o resultado:
Neste tópico vou mostrar um simples exemplo que utiliza o JNI.
Vamos criar um programa Java que vai declarar a função chamada getSoma, que receberá dois parâmetros e resultará a soma dos dois em forma de string.
Veja o código:
Para compilar:
javac exemplo1.java
Agora devemos gerar o arquivo exemplo1.h usando o aplicativo javah:
javah -jni exemplo1
Será gerado o arquivo de cabeçalho exemplo1.h com a declaração da função.
Veja o arquivo abaixo:
exemplo1.h:
Observe que o javah declarou a função com o padrão JNI. Os parâmetros int foram substituídos por jint e String substituído por jstring.
Agora devemos criar o arquivo exemplo1.cpp implementando esta função.
Vamos lá:
exemplo1.cpp:
Agora basta compilar o arquivo exemplo1.cpp:
g++ -fPIC -shared -o libexemplo1.so exemplo1.cpp
Este comando vai gerar o arquivo libexemplo1.so. Copie este arquivo para a pasta /usr/lib64 ou /usr/lib dependendo da sua distribuição Linux.
Para testar basta executar o programa exemplo1.class.
java exemplo1
Você deve obter o resultado:
O resultado de 2+3 é 5.