Respostas:
Parece que o GNU Compiler for Java pode converter o código-fonte Java em bytecode Java ou código de máquina. Ele também pode converter o bytecode Java existente em código de máquina. No entanto, as últimas notícias são de 2009, então não tenho certeza de quão atual é e se ele pode lidar com os recursos mais recentes da linguagem Java.
Não respondendo diretamente ao OP, mas talvez um aparte interessante. Java pode ser executado em três modos:
-Xint
sinalizador - Interpretado - Somente código de bytes-Xcomp
bandeira - Compilado - máquina compilada-Xcomp
porque eu não consegui encontrá-lo na documentação do JDK 7 ou na documentação das opções do HotSpot e não tenho certeza se você tem alguns segredos ocultos da lista de discussão que nós, meros mortais, não conhecemos :-)
javac
? ao usar o -Xcomp, por padrão, gera um único arquivo binário?
Talvez seja melhor detectar o sistema operacional usando System.getProperty (“os.name”) . Isso permitiria escolher oferecer suporte a mais de um sistema operacional, mas excluir outros.
java -Dos.name=MacOS
.
Agora é: GraalVM permite que você compile seus programas com antecedência em um executável nativo. Dê uma olhada no recurso de imagem nativa :
Resumo
https://www.graalvm.org/docs/getting-started/#native-images
Demonstrações: Imagens nativas para inicialização mais rápida
https://www.graalvm.org/docs/examples/native-list-dir/
Detalhado: 'Compilação Antecipada'
https://www.graalvm.org/docs/reference-manual/aot-compilation/
Pergunta relacionada: 'Posso compilar Java para código nativo?' https://stackoverflow.com/questions/2991799/can-i-compile-java-to-native-code/50555050#50555050
PS GCJ não é mais mantido.
Fonte: 'A exclusão do gcj' http://tromey.com/blog/?p=911