GCC-Java-4.9.1

Introduction à GCC-Java

Regardez l'introduction au langage et au système Java java-1.7.0.65. 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 un JVM acceptable depuis les sources. Cependant, depuis la publication de OpenJDK, le développement de GCC-Java a été stoppé, et la construction de JVM est une ancienne version. Une raison de construire ce système est qu'il peut être utilisé pour "booststrapper" OpenJDK-1.7.0.65/IcedTea-2.5.2, sans avoir besoin de télécharger un binaire Java.

Ce paquet est connu pour se construire correctement sur une plateforme LFS-7.6.

[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. Mercu de lire la note et l'avertissement sur la page GCC-4.9.1.

Information sur le paquet

Téléchargements supplémentaires

Dépendances de GCC

Requises

Zip-3.0, UnZip-6.0, et which-2.20

Recommandées

Facultative

gtk+-2.24.24 et Libart pour la construction de AWT

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

Installation de GCC Java

Les instructions 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, alors effacez --disable-bootstrap des options de ./configure.

comme dans LFS, corrigez un problème identifié par les developpeurs:

sed -i 's/if \((code.*))\)/if (\1 \&\& \!DEBUG_INSN_P (insn))/' gcc/sched-deps.c

Installez GCC Java en lançant la suite

sed -i 's/\(install.*:\) install-.*recursive/\1/' libffi/Makefile.in         &&
sed -i 's/\(install-data-am:\).*/\1/'             libffi/include/Makefile.in &&
patch -Np1 -i ../gcc-4.9.1-upstream_fixes-1.patch &&
cp ../ecj-latest.jar ./ecj.jar &&
mkdir ../gcc-build &&
cd    ../gcc-build &&
../gcc-4.9.1/configure           \
    --prefix=/usr                \
    --libdir=/usr/lib            \
    --enable-shared              \
    --enable-threads=posix       \
    --enable-__cxa_atexit        \
    --enable-clocale=gnu         \
    --disable-multilib           \
    --with-system-zlib           \
    --disable-bootstrap          \
    --enable-java-home           \
    --with-jvm-root-dir=/opt/gcj \
    --with-antlr-jar=$(pwd)/../antlr-4.2.2-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. Certain de ceux la seront signalés FAIL (en ECHEC) et d'autres XPASS (passage avec un échec attendu). Pour lancer les test, tapez :

ulimit -s 32768 &&
make -k check

Les tests sont très longs, et les résultats peuveut être difficiles à trouver dans les logs, principalement si vous utilisez un contrôle de travaux avec make. Vous pouvez avoir un résumé des tests avec :

../gcc-4.9.1/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/4.9.1/include{,-fixed} &&
gcj -o ecj ../ecj-latest.jar \
    --main=org.eclipse.jdt.internal.compiler.batch.Main &&
mv ecj /usr/bin &&
ln -sfv ../../../usr/bin/ecj /opt/gcj/bin/javac

Explications des commandes

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

patch ... gcc-4.9.1-upstream_fixes-1.patch: Ce correctif corrige des bogues dans le compilateur C++, qui aboutissent à une erreur de segmentation dans certain cas.

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

--enable-shared --enable-threads=posix --enable-__cxa_atexit : Ces paramètres sont requis pour construire les bibliothèques C++ standards.

--enable-clocale=gnu : Ce paramètre est une sécurité pour les données de locale incomplète.

--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++ sotn de la même version que cele que vous installez.

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

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

--with-antlr-jar=... : Spécifie l'endroit pour ANTLR, qui est utilisé pour construire gjdoc. A 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 reconstruit également.

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

ulimit -s 32768 : Cette commande empêche plusieurs tests de se lancer en dehors de la pile.

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

../gcc-4.9.1/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 changes 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 JVM.

Configuration de GCC-Java

Informations de configuration

La configuration est la même que pour OpenJDK-1.7.0.65/IcedTea-2.5.2, 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 libgij.so, et de nombreux autres bibliothèques et exécutables dans /usr/lib/gcc et /usr/libexec/gcc
Répertoires installés: /usr/include/c++/4.9.1/{gcj,gnu,java,javax,org,sun}, /usr/lib/gcj-4.9.1-15, /usr/lib/security, /opt/gcj/{bin,jre} et /usr/share/java

Quelques programmes et bibliothèques ne sont pas listés ici, mais peuvent être trouvés http://www.fr.linuxfromscratch.org/view/lfs-stable/chapter06/gcc.html#contents-gcc comme ils sont initialement installés pendant la construction de LFS.

Description courte

aot-compile

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

ecj

est le compialteur eclipse.

gappletviewer

charge et lance une applet Java.

gc-analyze

analyse les "garbage collector" (GC) des vidages de mémoire du code Java code.

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 cartographique de fichier de classes.

gcjh

génère les fichiers d'entê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'entêtes depuis les fichiers de class 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 de demandes d'objets cassés.

grmic

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

grmid

est un démon d'activation du sytè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 la base de données de per-solib fait par aot-compile dans la base de données coté système.

Last updated on 2014-05-10 22:28:15 +0200