GCC-Java-6.3.0
Introduction à GCC-Java
Regardez l'introduction au langage et au système Java sur Java-1.8.0.121.
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.121.
Ce paquet est connu pour se construire correctement sur une
plateforme LFS-8.0.
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.3.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
DejaGnu-1.6, pour les tests
Facultatives
GTK+-2.24.31 et Libart pour
la construction du pair 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 :
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac
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.6-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.3.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
devriez 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. Cette commande change 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
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.3.0/{gcj,gnu,java,javax,org,sun},
/usr/lib/gcj-6.3.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/8.0/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ées 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 2017-02-22 18:52:51 +0100