Les compilateurs java Linux et Windows produisent-ils des fichiers de classe identiques ou différents?


Nous avons la compilation Java à la fois sur Linux et Windows par la même version 1.6.0_25.

Pour une raison quelconque, les fichiers de classe résultants sont différents. Est-il correct?

Author: Alex, 2013-10-01

2 answers

Le bytecode Java est indépendant de la plate-forme.

 2
Author: kadaj, 2013-10-01 16:16:27

Le compilateur java n'est pas déterministe et peut ne pas générer la même chose .classe si compilé sur la même plate-forme plusieurs fois ou compilé sur différentes plates-formes. J'essaie de comprendre les composants internes du compilateur java pour voir pourquoi il n'est pas déterministe.

La recherche donne plus d'informations tout en apprenant sur l'option de compilation croisée dans javac :

Options de compilation croisée

Par défaut, les classes sont compilées par rapport au bootstrap et extension classes de la plate-forme que javac a livrée avec. Mais javac aussi prend en charge la compilation croisée, où les classes sont compilées contre un classes d'amorçage et d'extension d'une plate-forme Java différente application. Il est important d'utiliser -bootclasspath et -extdirs lors de la compilation croisée; voir l'exemple de compilation croisée ci-dessous.

 1
Author: Juned Ahsan, 2013-10-01 16:46:54