TUTORIEL

Java et GNU : GCJ

Le projet GNU suit les évolutions du monde informatique et tente de proposer ses outils pour chaque langage standard existant. C'est le cas pour le populaire langage Java, qui bénéficie maintenant de la toute puissance du compilateur GNU : GCC !

GNU et Java : 5 approches

Le compilateur GCC peut traiter le langage Java de plusieurs façons différentes.

A - Génération de bytecode à partir de sources Java

Le compilateur GNU (GCC) peut prendre des fichiers sources Java valides et les compiler en bytecode Java standard compatible avec toutes les machines virtuelles homologuées. C'est le module GCJ (GNU Compiler for Java) de Gcc qui réalise ces opérations.
Pour compiler l'application GreenJ contenue dans les fichiers sources du répertoire courant et sous-répertoires, taper :
    gcj -C *.java */*.java

B - Exécution de bytecode Java

De la même façon, GCC peut prendre des fichiers déjà en bytecode et les exécuter en tant que machine virtuelle standard Java. C'est le module GIJ (GNU Interpreter for Java) de Gcc qui réalise ces opérations.
Pour exécuter l'application GreenJ contenue dans le fichier GreenJ.jar, taper :
    gij GreenJ

C - Génération d'exécutables natifs à partir de sources Java

Là, nous entrons dans un domaine que seul GCC peut offrir à ce jour. En effet, en tant que compilateur ET interpréteur Java ainsi qu'assembleur natif, GCC peut très bien prendre un logiciel sous forme de sources Java et en tirer un exécutable assemblé pour une machine native (binaire x86, PowerPC, MIPS,...). Bien entendu, on perd alors le bénéfice de la portabilité offerte par Java, au profit de performances accrues.
Pour compiler nativement l'application GreenJ (dont le point de lancement est la classe GreenJ.java) contenue dans les fichiers sources du répertoire courant et sous-répertoires, taper :
    gcj *.java */*.java -o GreenJ

D - Génération d'exécutables natifs à partir de bytecode Java

De la même manière que ci-dessus, en tant qu'interpréteur Java et assembleur natif, GCC peut prendre du bytecode Java et en tirer un binaire spécifique à un processeur pour un système d'exploitation donné.
Pour compiler nativement l'application GreenJ (dont le point de lancement est la classe GreenJ.java) contenue dans les fichiers bytecode du répertoire courant et sous-répertoires, taper :
    gcj --main=GreenJ *.class */*.class -o GreenJ

E - Fourniture des classes étendues du JDK Java

Le JRE de Sun(tm) est fourni avec un ensemble de paquetages et classes applicatifs spécialisés, qui sont utilisés par quasiment tous les logiciels écrits en Java. GCC ne contenant (sauf erreur de ma part) que les classes strictement liées au langage lui-même, le projet GNU a entrepris de fournir l'essentiel des fonctionnalités offertes au sein de la JRE officielle : c'est la bibliothèque/projet GNU ClassPath.