GCC-Java-6.2.0

Introduction à GCC-Java

Regardez l'introduction au langage et au système Java sur Java-1.8.0.102. La collection de compilateur GNU (GCC) contient un compilateur Java de code natif. Et avec le compilateur Java ecj d'Eclipse (vers du bytecode), il fournit un moyen de construire une JVM acceptable depuis les sources. Cependant, depuis la publication de OpenJDK, le développement de GCC-Java a été stoppé, et la JVM construite est une ancienne version, qui ne peut pas être utilisée pour construire OpenJDK-1.8.0.102.

This package is known to build and work properly using an LFS-7.10 platform.

[Attention]

Attention

L'utilisation des instructions de cette page aura pour effet que les compilateurs et bibliothèques C et C++ seront réinstallés, écrasant celle de votre système. Cela peut causer des problèmes. Merci de lire la note et l'avertissement sur la page GCC-6.2.0.

Informations sur le paquet

Téléchargements supplémentaires

Dépendances de GCC Java

Requises

UnZip-6.0, Which-2.21 et Zip-3.0

Recommandées

Facultatives

GTK+-2.24.30 et Libart pour la construction de AWT

Notes utilisateur : http://wiki.linuxfromscratch.org/blfs/wiki/gcc-java

Installation de GCC Java

Les instructions ci-dessous considèrent que les compilateurs C et C++ ont la même version que ceux que vous avez installé, pour qu'un « bootstrap » ne soit pas nécessaire. Si vous avez mis à jour la version de GCC, effacez --disable-bootstrap des options de ./configure.

Installez GCC Java en lançant les commandes suivantes :

sed -i 's/\(install.*:\) install-.*recursive/\1/' libffi/Makefile.in         &&
sed -i 's/\(install-data-am:\).*/\1/'             libffi/include/Makefile.in &&
sed -i 's/absolute/file normalize/' libjava/testsuite/lib/libjava.exp &&
sed -i 's/major.*1000.*minor/major/' gcc/java/decl.c &&

cp ../ecj-4.9.jar ./ecj.jar &&

mkdir build &&
cd    build &&

../configure                     \
    --prefix=/usr                \
    --disable-multilib           \
    --with-system-zlib           \
    --disable-bootstrap          \
    --enable-java-home           \
    --with-jvm-root-dir=/opt/gcj \
    --with-antlr-jar=$(pwd)/../../antlr-4.5.1-complete.jar \
    --enable-languages=java &&
make

si vous avez installé des paquets supplémentaires comme Valgrind et GDB, la suite de tests de GCC lancera plus de tests que dans LFS. Certains de ceux-là seront signalés FAIL (en ECHEC) et d'autres XPASS (passage alors qu'un échec était attendu). Pour lancer les test, tapez :

ulimit -s 32768 &&
make -k check

Les tests sont très longs, et les résultats peuvent être difficiles à trouver dans les logs, en particulier si vous utilisez des processus parallèles avec make. Vous pouvez avoir un résumé des tests avec :

../contrib/test_summary

Maintenant, en tant qu'utilisateur root :

make install &&

mkdir -pv /usr/share/gdb/auto-load/usr/lib              &&
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib &&

chown -v -R root:root \
    /usr/lib/gcc/*linux-gnu/6.2.0/include{,-fixed} &&

gcj -o ecj ../../ecj-4.9.jar \
    --main=org.eclipse.jdt.internal.compiler.batch.Main &&
mv ecj /usr/bin &&
ln -sfv ../../../usr/bin/ecj /opt/gcj/bin/javac

Explication des commandes

Les deux premières commandes sed empêchent l'installation de la bibliothèque libffi livrée avec GCC, car elle est dépassée comparée à libffi-3.2.1.

Les deux commandes sed suivantes ajoutent un correctif amont au compilateur et aux tests GCC Java.

mkdir build; cd build : La documentation de GCC recommande de construire le paquet dans un répertoire de construction dédié.

--disable-multilib : Ce paramètre assure que les fichiers sont créés pour l'architecture spécifique à votre ordinateur.

--with-system-zlib : Utilise la version zlib du système à la place de celle empaquetée.

--disable-bootstrap : Empêche les compilateurs C et C++ de se recompiler eux-même. Vous devez utiliser ce paramètre seulement si les compilateurs C et C++ sont de la même version que celle que vous installez.

--enable-java-home : Crée une couche de répertoires similaire à une JVM.

--with-jvm-root-dir=/opt/gcj : Installe la JVM dans un endroit spécifique.

--with-antlr-jar=... : Spécifie l'endroit pour ANTLR, qui est utilisé pour construire gjdoc. À supprimer si vous n'avez pas téléchargé antlr.

--enable-languages=java : Cette commande identifie quel langage construire. Notez qu'il est inévitable que les compilateurs C et C++ soient reconstruits également.

--enable-java-awt=gtk : Permet de construire le pair GTK+2 de Java AWT. Utile pour avoir une JVM pleinement fonctionnelle.

ulimit -s 32768 : Cette commande évite que plusieurs tests tombent à court d'espace dans la pile.

make -k check : Cette commande lance la suite de tests sans stopper si quelques erreurs sont générées.

../contrib/test_summary : Cette commande produira un résumé des résultats de la suite de tests. Vous pouvez ajouter | grep -A7 Summ à la commande pour produite une version encore plus condensée du résumé. Vous pouvez également souhaiter rediriger la sortie dans un fichier pour étudier et comparer plus tard.

chown -v -R root:root /usr/lib/gcc/*linux-gnu/... : Si le paquet est construit par un utilisateur autre que root, les droits du répertoire include installé (et son contenu) seront incorrects. Ces commandes changent les droits vers l'utilisateur et le groupe root.

gcj -o ecj ... : compile le compilateur eclipse depuis le code natif, qui est plus rapide que le bytecode. Ce compilateur est également utilisé comme une alternative à javac dans la JVM.

Configuration de GCC-Java

Informations de configuration

La configuration est la même que pour Configuration de l'environnement JAVA, en remplaçant /opt/jdk par /opt/gcj.

Contenu

Programmes installés: aot-compile, ecj, gappletviewer, gc-analyze, gcj, gcj-dbtool, gcjh, gij, gjar, gjarsigner, gjavah, gjdoc, gkeytool, gnative2ascii, gorbd, grmic, grmid, grmiregistry, gserialver, gtnameserv, jcf-dump, jv-convert, rebuild-gcj-db. Des liens symboliques vers ses fichiers sont situés dans /opt/gcj/bin
Bibliothèques installées: libgcj_bc.so, libgcj.so, libgcj-tools.so et libgij.so
Répertoires installés: /usr/include/c++/6.2.0/{gcj,gnu,java,javax,org,sun}, /usr/lib/gcj-6.2.0-17, /usr/lib/jvm-exports, /usr/lib/security, /opt/gcj et /usr/share/java

Quelques programmes, bibliothèques et descriptions ne sont pas listés ici, mais peuvent être trouvés sur ../../../../lfs/view/7.10/chapter06/gcc.html#contents-gcc comme ils sont initialement installés pendant la construction de LFS.

Descriptions courtes

aot-compile

cherche un répertoire pour le bytecode de Java et utilise gcj pour le compiler en code natif.

ecj

est le compilateur Java Eclipse.

gappletviewer

charge et lance une applet Java.

gc-analyze

analyse les vidages de mémoire du ramasse-miettes (GC) du code Java.

gcj

est un compilateur d'avance de temps pour le langage Java.

gcj-dbtool

est un outil pour créer et manipuler des bases de données cartographiques de fichier de classes.

gcjh

génère les fichiers d'en-têtes des fichiers de classes de Java.

gij

est l'interpréteur GNU pour le code binaire Java.

gjar

est une implémentation (partielle) de l'utilitaire jar qui vient avec le JDK de Sun.

gjarsigner

est un outil de vérification et signature des fichiers Java ARchive (JAR).

gjavah

génère les fichiers d'en-têtes depuis les fichiers de classe Java.

gjdoc

est un outil de documentation similaire à javadoc.

gkeytool

gère les clés privés et les certificats publiques dans un environnement Java.

gnative2ascii

est un convertisseur d'encodage pour Java.

gorbd

est un démon répartiteur de demandes d'objets.

grmic

génère des bouts d'appels à une méthode distante.

grmid

est un démon d'activation du système RMI.

grmiregistry

démarre un registre objet distant sur l'hôte actuel.

gserialver

affiche le serialVersionUID de la classe spécifiée.

gtnameserv

démarre un service de noms.

jcf-dump

affiche des informations sur les fichiers de classe Java.

jv-convert

convertit des fichiers d'un encodage à l'autre.

rebuild-gcj-db

Fusionne les bases de données de per-solib faites par aot-compile dans la base de données du système.

Last updated on 2016-08-31 15:34:06 +0200