quinta-feira, 25 de outubro de 2007

Gerar código nativo em Java

Uma das grandes reclamações dos Javeiros era a impossibilidade de geração de código nativo com o Javacão. Em alguns casos, principalmente em situações com recursos críticos, o código interpretado do java pode influenciar na confiabilidade da aplicação.

Muita gente não conhece o GCJ, o compilador primo do famoso GCC do Stallman. Ele é capaz de compilar o .java e transformá-lo em código nativo (para Linux/Solaris, inicialmente).

Pra quem quer testar, lá vai o código básico =]
(Peguei no site do GCJ e traduzi mal e porcamente)

1. Instale o GCC.

2. Crie um diretório de compilação

$ mkdir compile

3. Mova o gcc pro diretório de compilação.

$ cd compile
$ mv ../gcc-20001211.tar.gz .
$ gunzip *.gz
$ tar xfv *.tar
$ ln -s gcc-20001211 gcc

4. Diga ao build que você quer construir o libgcj

Dê uma olhada no configure.in (gcc/configure.in) e tenha certeza que a variável `noconfigdirs' não está atribuída a alguma coisa(como target-libjava or ${libgcj}.)


Também cheque por atribuições específicas de plataforma de `noconfigdirs' com
${libgcj}; se ${libgcj} está listado para sua plataforma, remova-a antes de configurar.

5. Compile e instale gcc/gcj/libgcj

$ cd compile
$ mkdir objdir
$ cd objdir
$ ../gcc/configure --enable-threads=posix --prefix=/home/joerg/gcc \
--enable-shared --enable-languages=c++,java \
--with-as=/opt/gnu/bin/as --with-ld=/opt/gnu/bin/ld
$ make bootstrap
$ make
$ make install

O Boehm GC é o coletor de utilizado por default.

Se você compilar no Linux você pode omitir as últimas duas opções. No Solaris, você vai precisar delas. Se você omitir '--prefix', o código compilado ficará em /usr/local.


6. Ajustando o ambiente

setenv PATH /home/joerg/gcc/bin:$PATH
setenv LD_LIBRARY_PATH /home/joerg/gcc/lib


7. HelloWorld.java

public class HelloWorld {
public static void main(String [] args) {
System.out.println("Hello");
}
}

8. Compilando HelloWorld

$ gcj --main=HelloWorld -o HelloWorld HelloWorld.java

9. Rodando HelloWorld

$ ./HelloWorld




E chubirú =D



Uma boa leitura sobre o GCJ (e em português) é um pdf/palestra do Fernando Lozano, onde ele explica algumas características do código e da própria linguagem Java.


Até mais o/

Nenhum comentário: