Risposte:
Sembra che il compilatore GNU per Java possa convertire il codice sorgente Java in bytecode Java o codice macchina. Può anche convertire il bytecode Java esistente in codice macchina. Tuttavia, le ultime notizie sono del 2009, quindi non sono sicuro di quanto sia attuale e se sia in grado di gestire le ultime funzionalità del linguaggio Java.
Non rispondendo direttamente all'OP, ma forse un lato interessante. Java può essere eseguito in tre modalità:
-Xint
flag - Interpretato - Solo codice byte-Xcomp
bandiera - Compilato - Macchina compilata-Xcomp
perché non ho trovato quello nella documentazione di JDK 7 o nella documentazione delle opzioni di HotSpot e non sei sicuro di avere segreti nascosti nella mailing list di cui noi semplici mortali non siamo a conoscenza :-)
javac
? quando si utilizza -Xcomp, per impostazione predefinita viene generato un singolo file binario?
Potrebbe essere meglio rilevare il sistema operativo utilizzando System.getProperty ("os.name") . Ciò ti consentirebbe di scegliere di supportare più di un sistema operativo, ma di escluderne altri.
java -Dos.name=MacOS
.
Ora è: GraalVM ti consente di compilare i tuoi programmi in anticipo in un eseguibile nativo. Dai un'occhiata alla funzione di immagine nativa :
Riepilogo
https://www.graalvm.org/docs/getting-started/#native-images
Demo: immagini native per l'avvio più veloce
https://www.graalvm.org/docs/examples/native-list-dir/
Informazioni dettagliate: "Compilazione anticipata"
https://www.graalvm.org/docs/reference-manual/aot-compilation/
Domanda correlata: "Posso compilare Java in codice nativo?" https://stackoverflow.com/questions/2991799/can-i-compile-java-to-native-code/50555050#50555050
PS GCJ non è più gestito.
Fonte: "La cancellazione di gcj" http://tromey.com/blog/?p=911