usando java para chamar .so e

3
25/3/2014 Usando Java para chamar .so e .dll - Gustavo Ferreira http://www.gqferreira.com.br/artigos/ver/usando-java-para-chamar-so-dll 1/3 Home Sobre Artigos Projetos Blog Contato Bibliotecas .so .dll Usando Java para chamar .so e .dll Publicado em 27/08/2013 Recomende isto no Google Materiais Para fazer chamadas à bibliotecas nativas do sistema operacional vamos precisar da biblioteca JNA (Java Native Access). Para isso faça o download direto na fonte: https://github.com/twall/jna/raw/master/dist/jna.jar Você também vai precisar de uma biblioteca nativa para fazer os testes. Se você não tiver uma e/ou quiser criar a própria, veja no final do artigo como. Vou partir do presuposto de que você já tem o Java instalado e devidamente configurado e, incialmente, de que você faça uso de alguma IDE para facilitar. Downloads dos fontes e compilados no final da página Direto ao ponto Classe Java Para cada função da biblioteca (com seus parâmetros e retornos) deve haver uma assinatura idêntica na iterface BibliotecaNativa (que poderia se chamar "XuxuComBanana"). Deve haver os dois imports do JNA sempre. Se você estiver usando Windows, a .dll deve estar no mesmo diretório que a classe ou em C:\Windows\System32 (se não me engano). Se você estiver usando Linux, a .so deve estar obrigatoriamente em /usr/lib e se chamar libcalc.so e permanecer como calc na classe Java. Nunca coloque a extensão da biblioteca na chamada do Java. Criando a sua biblioteca escrita em C (no Linux) Você precisará do GCC (GNU Compiler Collection) para compilar o código. Muito provavelmente seu Linux já tenha "de fábrica". Vamos criar uma Shared Library (bibliteca compartilhada) Header da biblioteca Ultimas atualizações Usando Java para chamar .so e .dll Direto ao ponto: Como chamar uma biblioteca nativa do sistema (.so/.dll) direto pelo Java usando JNA. Veja nesse artigo simples e objetivo uma forma de usar bibliotecas nativas dos sistema operacional através do Java, sem historinha e blá blá... mas se quiser, veja através do exemplo como compilar em C uma biblioteca no Linux. Ubuntu Edge Os smartphones dominam o mercado de dispositivos móveis atualmente, afinal de contas ninguém mais quer um aparelho celular comum para jogar snake e mandar SMS. Pensando nessa evolução, a Canonical decidiu radicalizar e criar um aparelho que seja smartphone e computador ao mesmo tempo, tudo isso com um hardware comparável ao PC... Veja o que houve no FLISOL 2013 Você já participou alguma vez do FLISOL? Afinal, do que se trata? FLISOL significa Festival Latino Americano de Instalação de Software Livre. É um evento internacional que é realizado simultaneamente em várias cidades e é promovido uma vez por ano. O evento aborda palestras, demonstrações, debates... /* Gustavo Ferreira */ Busca Anuncie no Google google.com.br/AdWords/Promo Seja Encontrado. Consiga Clientes. Obtenha Hoje R$100 ao Investir R$50 01 import com.sun.jna.Library; 02 import com.sun.jna.Native; 03 04 public class RodarComJNA { 05 06 public interface BibliotecaNativa extends Library{ 07 public int soma( int n1, int n2); 08 } 09 10 public static void main(String[] args) { 11 BibliotecaNativa lib = (BibliotecaNativa) Native.loadLibrary( "calc" , BibliotecaNativa. class ); 12 13 int resultado = lib.soma( 10 , 15 ); 14 15 System.out.println( "Mostrando o resultado retornado pela biblioteca direto no Java: " + resultado); 16 } 17 }

Upload: jvcss21

Post on 28-Dec-2015

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Usando Java Para Chamar .So e

25/3/2014 Usando Java para chamar .so e .dll - Gustavo Ferreira

http://www.gqferreira.com.br/artigos/ver/usando-java-para-chamar-so-dll 1/3

Home Sobre Artigos Projetos Blog Contato

Bibliotecas .so .dll

Usando Java para chamar .so e .dll

Publicado em 27/08/2013

Recomende isto no Google

Materiais

Para fazer chamadas à bibliotecas nativas do

sistema operacional vamos precisar da biblioteca JNA

(Java Native Access). Para isso faça o download

direto na fonte:

https://github.com/twall/jna/raw/master/dist/jna.jar

Você também vai precisar de uma biblioteca nativa

para fazer os testes. Se você não tiver uma e/ou

quiser criar a própria, veja no final do artigo como.

Vou partir do presuposto de que você já tem o Java

instalado e devidamente configurado e, incialmente,

de que você faça uso de alguma IDE para facilitar.

Downloads dos fontes e compilados no final da página

Direto ao ponto

Classe Java

Para cada função da biblioteca (com seus parâmetros e retornos) deve haver uma

assinatura idêntica na iterface BibliotecaNativa (que poderia se chamar

"XuxuComBanana").

Deve haver os dois imports do JNA sempre.

Se você estiver usando Windows, a .dll deve estar no mesmo diretório que a classe ou

em C:\Windows\System32 (se não me engano).

Se você estiver usando Linux, a .so deve estar obrigatoriamente em /usr/lib e se chamar

libcalc.so e permanecer como calc na classe Java.

Nunca coloque a extensão da biblioteca na chamada do Java.

Criando a sua biblioteca escrita em C (no Linux)

Você precisará do GCC (GNU Compiler Collection) para compilar o código. Muito provavelmente

seu Linux já tenha "de fábrica". Vamos criar uma Shared Library (bibliteca compartilhada)

Header da biblioteca

Ultimas atualizações

Usando Java para chamar .so e .dll

Direto ao ponto: Como chamar uma

biblioteca nativa do sistema (.so/.dll) direto

pelo Java usando JNA. Veja nesse artigo

simples e objetivo uma forma de usar

bibliotecas nativas dos sistema operacional

através do Java, sem historinha e blá blá...

mas se quiser, veja através do exemplo

como compilar em C uma biblioteca no

Linux.

Ubuntu Edge

Os smartphones dominam o mercado de

dispositivos móveis atualmente, afinal de

contas ninguém mais quer um aparelho

celular comum para jogar snake e mandar

SMS. Pensando nessa evolução, a

Canonical decidiu radicalizar e criar um

aparelho que seja smartphone e

computador ao mesmo tempo, tudo isso

com um hardware comparável ao PC...

Veja o que houve no FLISOL 2013

Você já participou alguma vez do FLISOL?

Afinal, do que se trata? FLISOL significa

Festival Latino Americano de Instalação de

Software Livre. É um evento internacional

que é realizado simultaneamente em várias

cidades e é promovido uma vez por ano. O

evento aborda palestras, demonstrações,

debates...

/* Gustavo Ferreira */Busca

Anuncie no Googlegoogle.com.br/AdWords/Promo

Seja Encontrado. Consiga Clientes. Obtenha Hoje R$100 aoInvestir R$50

01 import com.sun.jna.Library;02 import com.sun.jna.Native;03 04 public class RodarComJNA {05 06 public interface BibliotecaNativa extends Library{07 public int soma(int n1, int n2);08 }09

10 public static void main(String[] args) {11 BibliotecaNativa lib = (BibliotecaNativa) Native.loadLibrary("calc",

BibliotecaNativa.class);12 13 int resultado = lib.soma(10, 15);14 15 System.out.println("Mostrando o resultado retornado pela biblioteca

direto no Java: " + resultado);16 }17 }

Page 2: Usando Java Para Chamar .So e

25/3/2014 Usando Java para chamar .so e .dll - Gustavo Ferreira

http://www.gqferreira.com.br/artigos/ver/usando-java-para-chamar-so-dll 2/3

Download (fontes e compilados)

Crie um arquivo com a extensão .h da sua biblioteca contendo todas as assinaturas das funções

que você desejar criar. No exemplo utilizado o arquivo se chama calc.h

Crie o arquivo principal da sua biblioteca, o .c.

Agora vamos compilar a nossa biblioteca e gerar um arquivo objeto. Em seguida fazer o link com

as bibliotecas do sistema. Os comandos são esses, incluse na ordem:

gcc -c -fPIC calc.c -o calc.o

gcc -shared -o libcalc.so calc.o

Agora você vai precisar copiar a biblioteca para o diretório padrão no GNU/Linux:

sudo sp libcalc.so /usr/lib

Criando um JAR com o JNA embutido

Vamos agora criar na unha um JAR com as classes do JNA embutido. Se você usa IDE (tomara)

esqueça isso pois a ferramenta fará isso por você. Se for um "hardcore", siga os passos abaixo.

Descompacte a biblioteca JNA que você baixo:

unzip jna.jar

Você deve ter percebido que apareceu uma pasta chamada META-INF e outra chamada com. Vamos

agora criar uma pasta chamada bibliotecas e copiar a com para dentro.

mkdir bibliotecas

cp com -r bibliotecas

Agora é necessário compilar a classe Java que foi apresentada logo no início do artigo. Durante a

compilação vamos indicar qual é o classpath, ou seja, onde está as nossas bibliotecas.

javac RodarComJNA.java -cp bibliotecas

Antes de criar o JAR você precisará criar um arquivo contendo as informações para o manifesto do

pacote. Crie um arquivo com qualquer nome (utilizei 'manifesto.txt') contendo o seguinte

conteúdo:

Manifest-Version: 1.0

Created-By: 1.6.0_37 (Sun Microsystems Inc.)

Main-Class: RodarComJNA

Agora vamos de fato criar o JAR, colocando dentro do pacote o manifesto, as classes e a pasta

principal dos fontes do JNA.

jar cfm RodarComJNA.jar manifesto.txt *.class com

Pronto! Já é para aparecer um arquivo chamado RodarComJNA.jar. Para executar o seu JAR basta

chamar via linha de comando da seguinte forma:

java -jar RodarComJNA.jar

Qualquer dúvida, deixe seu comentário logo abaixo. Se deu certo ou errado, deixe também ^^

Comentarios (0) para Usando Java para chamar .so e .dll

Não há comentários ainda, seja o primeiro!

Gostou do artigo? Acha que poderia ser melhor em algum ponto? Dê o seu feedback!

Nome: *

Informe o seu nome

1 #include <stdio.h>2 #include <stdlib.h>3 4 int soma(int n1, int n2);

1 #include <stdio.h>2 #include <tdlib.h>3 #include "calc.h"4 5 int soma(int n1, int n2){6 printf("Print dentro da biblioteca:%i\n", n1+n2);7 return n1+n2;8 }

Page 3: Usando Java Para Chamar .So e

25/3/2014 Usando Java para chamar .so e .dll - Gustavo Ferreira

http://www.gqferreira.com.br/artigos/ver/usando-java-para-chamar-so-dll 3/3

Enviar

Seu site:(Opcional)

Informe o seu site

Comentário: *

Contatos

Não é possível exibir esta página

Com base nas políticas de acesso da sua organização, o acesso a este site( http://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fgqferreira.com.br&width=315&height=293&colorscheme=light&show_faces=true&border_color=%23fff&stream=false&header=true )foi bloqueado.

Em caso de dúvidas, entre em contato com o SERVICEDESK (7290)[email protected]

© 2013 | gqferreira.com.br | All Rights Reserved | Professional Portfolio is a CSS Template relealsed by CSSHeaven

Soluções

Desktop - Desenvolvimento de softwares

para controle financeiro, PDV, ERP entre

outros.

Mobile - Sistemas para smpartphones e

tablets.

Web - Websites, CMS e sistemas web

para controle financeiro e produtivo.

Privacidade

Privacy & Terms

Type the text