IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Compilation Java avec GCJ pour faire un exe. Pourquoi ?


Sujet :

Java

  1. #1
    Membre averti
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Points : 327
    Points
    327
    Par défaut Compilation Java avec GCJ pour faire un exe. Pourquoi ?
    Bonsoir,

    Par curiosité et pour ma culture générale.

    Lorsque l'on compile un programme Java avec GCJ pour faire un éxécutable *.exe, pourquoi ce dernier est-il ENORME ?

    Exemple:
    Point.java = 503 octets
    Cercle.java = 832 octets
    ClasseSimpleMain = 1420 octets
    Soit un total de : 2 755 octets.

    Une fois compilé, ce petit prog fait : 8 500 Ko... 8,5 Mo...
    Il fonctionne, correctement, mais il est 3 000 fois plus gros !

    Il s'agit d'un petit programme d'apprentissage fonctionnant sous console Dos.

    Peut-être que la réponse se trouve sur le site de GNU,( que j'ai traversé en tous sens ) mais malheureusement pour moi ce site ( comme bien d'autres ) est en Anglais et j'ai quelques difficultés avec cette langue.

    J'ai l'impression que dans le " .exe " on y retrouve TOUTES les classes Java, même celles qui n'y ont rien à y faire, simplement parce qu'elles font parti du même package...peut-être.

    Est-ce normal ?
    Ai-je oublié quelque chose ?
    Ou est-ce autre chose ?

    Quelqu'un s'est-il déjà penché sur ce problème ? ( compilation GCJ )

    D'avance merci pour vos réponses et à demain

    Amicalement.

    Claude.

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je ne suis pas tout à fait sûr de ma réponse, mais je dirais que c'est normal. Car, gcj compile toutes tes classes en natif, mais tes classes appellent d'autres classes qui sont dans l'api java et ces classes, il faut aussi les compiler en natif pour qu'il n'y ait aucun appell à la JRE. Donc, tu n'as pas que la taille de tes classes à prendre en compte, mais aussi cellle de toutes les classes que tu utilises. Par exemple pour une simple JFRame, il va falloir compiler en natif, toutes les classes qu'utilise JFrame plus la tienne ou tu l'utilise.

  3. #3
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Je suis également du même avis.
    La taille du prog en natif vient du fait qu'on doit porter en natif tous les objets et classe utilisées dans le projet, d'une simple String à des objets très complexes.
    Vu que tu demandes à être indépendant de la jre, il faut tout compiler en natif.

    Question bête (sans doute), mais pourquoi compiler en natif une appli java ???
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  4. #4
    Membre averti
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Points : 327
    Points
    327
    Par défaut
    Bonjour,

    Tout d'abord, merci pour ces deux réponses.

    Je suis bien conscient qu'effectivement il faille compiler toutes les classes dont le programme à besoin et je suis aussi conscient que la taille d'un java compilé sera plus importante que celle d'un programme C identique ( abscence de dll entre autre... ) mais dans l'exemple cité ci-dessus ( exemple vécu ) 3 000 fois plus !! c'est vraiment beaucoup.

    Après être rentré dans le pgr .exe cité, il me semble que bon nombre de classes n'ont rien à y faire ?...il me semble !

    Pour Regis.C
    1°/ Par simple curiosité et travail intellectuel. ( Faire tourner les neurones et savoir comment ça marche. )
    ensuite,
    2°/ Personnellement, je pense que java aurait beaucoup à y gagner à pouvoir faire les deux. Rester multi-plateforme avec sa JVM et pouvoir faire des éxécutables natifs. Il n'y a qu'à voir les nombreuses demandes faites sur les forums. " Comment faire un exe avec Java... "
    Mais c'est un avis tout personnel, car au fil de mes lectures j'ai cru comprendre que bon nombre de " Javistes " tenaient à conserver la conception actuelle. Il n'empêche que certaines personnes influantes dans le domaine de l'informatique se sont penchées et se penchent encore actuellement sur le problème.
    J'ai lu, sur le site de GNU ( News GCJ ), mais peut-être ai-je mal compris ( Bad Anglais ! ) que GCJ allait s'associer avec Eclipse pour faire un " Front-End "... ( Compilateur Natif... Non !! )

    Je pense que l'avenir sera aux deux possibilités.
    Pouvoir choisir en fonction de ce que l'on veut faire.


    Encore et @++

    Claude

  5. #5
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Merci pour tes précisions.
    Quand aux nombreux sujet "comment faire un .exe en java", je pense que 90% des demandes parlent d'un launcher java, qui a l'avantage d'être plus "parlant" pour les non-informaticiens qu'un .jar executable (icone personnel, propriété, etc.) et fait d'avantage "application aboutie" qu'un .bat qui lance la ligne de commande.

    J'en suis moi-même un des utilisateurs puisque la plupart de mes applis java sont launchées via un pseudo .exe créé à partir de JToExe, tout en conservant la possibilité de lancer l'appli de manière moins "intuitive" pour l'utilisateur lambda.
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  6. #6
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Claude URBAN
    Après être rentré dans le pgr .exe cité, il me semble que bon nombre de classes n'ont rien à y faire ?...il me semble !
    Lesquelles par exemple ?

    On se rend pas compte du nombre de classes que l'on utilise, il faut compter chaque classe que l'on étend, chaque classe que l'on implémente, chaque classe que l'on emploie et ensuite, chaque classe qu'emploie chaque classe que l'on emploie

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Sans oublier tout ce qui est implicite et/ou géré normalement par la JVM (API de base, ClassLoader, reflection, Garbage Collector, etc.).

    a++

  8. #8
    Membre averti
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Points : 327
    Points
    327
    Par défaut
    Re,

    Effectivement je n'avais pas envisagé ces demandes de classes en cascades ni surtout, celles générées par la JVM... d'ou l'utilité ( entre autre ) et l'importance de ce forum.

    Ne pas rester seul avec ses idées, surtout quand elles sont érronées.

    Mais :
    Un launcher* n'est-il pas justement un " palliatif " à ce manque ?
    Je ne pense pas que les non-informaticiens puissent demander ce qu'ils ne connaissent pas*... Ils veulent du bon, du vrai.

    Q : Comment faire un éxécutable... Pour eux c'est un exe qu'ils veulent, un vrai.
    R : On ne peut pas, mais il existe un ( palliatif ) un Launcher*...faute de mieux!

    Re

    * personnellement je n'entends parler de Launcher que depuis que je m'intéresse à Java.

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Claude URBAN
    Q : Comment faire un éxécutable... Pour eux c'est un exe qu'ils veulent, un vrai.
    R : On ne peut pas, mais il existe un ( palliatif ) un Launcher*...faute de mieux!
    Quel est ta cible ?
    Java Web Start pourrait être une alternative sympatique (tout est transparent pour l'utilisateur et tu as en plus une mise à jours automatique).

    Sinon qu'est-ce qui te gène dans le principe du launcher ? si ce n'est que tu dois quand même avoir une JVM ???

    a++

  10. #10
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Citation Envoyé par Claude URBAN
    Mais :
    Un launcher* n'est-il pas justement un " palliatif " à ce manque ?
    Non car ce n'est pas un manque. C'est juste qu'un utilisateur windows reconnait un .exe, et que ce dernier signifie qu'un double-clique démarre un programme. Un .bat ou pire une ligne de comande à taper ne fait pas très sérieux, et n'est pas forcément à la portée de l'utilisateur final.
    Voila pourquoi les launcher existent.

    Citation Envoyé par Claude URBAN
    Q : Comment faire un éxécutable... Pour eux c'est un exe qu'ils veulent, un vrai.
    Alors il se trompe de langage pour ce qu'ils veulent faire, car ils orientent leur développement pour une plateforme définie sans portabilité.
    Citation Envoyé par Claude URBAN

    * personnellement je n'entends parler de Launcher que depuis que je m'intéresse à Java.
    Peut-être et sans doute car c'est le seul langage qui permet une portabilité multi-plateforme (JVM) ayant en plus des outils permettant de présenter à s'y méprendre un programme dont le langage devient transparent pour l'utilisateur final...
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  11. #11
    Membre averti
    Avatar de Claude URBAN
    Homme Profil pro
    Prendre le temps de vivre. . .
    Inscrit en
    Mai 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Prendre le temps de vivre. . .

    Informations forums :
    Inscription : Mai 2006
    Messages : 274
    Points : 327
    Points
    327
    Par défaut
    Bonjour,

    Surtout, ne vous méprenez pas sur mes intentions.
    Si j'ai décidé d'apprendre le langage Java, ce n'est pas pour essayer de le démonter.
    C'est un langage qui pour le moment me plaît beaucoup, j'essaie simplement de bien tout comprendre et bien sur je me pose encore beaucoup de questions.

    Je ne cible rien en particulier.
    Je ne suis qu'un amateur de longue date, qui souhaite pour le plaisir s'orienter sur un autre langage que le C++.

    Le java par sa Philosophie POO, son modernisme, sa jeunesse ( 10 ans ) et son importante communauté m'a attiré..

    Je ne connaît pas " Java Web Start ". Est-ce un langage uniquement tourné vers le Web ?

    " Sinon qu'est-ce qui te gène dans le principe du launcher ? Si ce n'est que tu dois quand même avoir une JVM ??? "
    Le Launcher ne me gène pas en soi, je l'utilise aussi, ( mais comme palliatif )
    Je trouve dommage d'être obligé d'avoir une JVM.
    Surtout si l'on ne souhaite pas spécialement faire un programme portable et que l'on désire quand même ( voir ci-dessus les raisons ) programmer en Java.
    Pourquoi java devrait-il être uniquement multi-plateforme ?
    Pourquoi ne pourrait-il pas en plus pouvoir être indépendant et pouvoir se passer de sa JVM.
    Java n'a-t-il été créé que dans le seul but d'être multi-plateforme ?. Mais c'était, il y un peu plus de 10 ans. Le monde change.
    Le coté portable d'un programme est une excellente chose, certes, mais pourquoi ne pas avoir le choix. S'il y a la demande… et je pense qu'elle existe.

    Sinon, pourquoi des informaticiens de renoms comme Gene Sally et Richard Stellman entre autre ( de Linux ) se pencheraient-ils sur ce coté ( obscure ) de Java et pourquoi existerait-il un partenariat entre Eclipse et GNU pour faire un " Front-End " s'il n'y avait pas la demande de créer des exécutables Java. http://gcc.gnu.org/java/index.html ( mais peut-être ai-je mal traduit leurs intentions ? )

    Je trouve que c'est dommage, mais je n'en ferai pas une maladie et je n'abandonnerai pas pour autant Java... (pour le moment)



    Personne d'autre pour me soutenir dans ce débat ??
    Suis-je le seul à penser de la sorte ??

    Je me promene beaucoup sur le net et je peux vous dire que beaucoup, beaucoup de personnes se penchent sur cette possibilité... " everywhere in the world ! "

    @ suivre ??

    Claude

  12. #12
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Citation Envoyé par Claude URBAN
    Pourquoi java devrait-il être uniquement multi-plateforme ?
    J'aime bien le paradoxe de ta phrase...
    "uniquement multi-plateforme".
    C'est vrai après tout ! Pourquoi java pourrait s'executer uniquement partout ?!!
    Pourquoi pas seulement sur xxxxx !
    C'est un scandale !
    Citation Envoyé par Claude URBAN
    Pourquoi ne pourrait-il pas en plus pouvoir être indépendant et pouvoir se passer de sa JVM.
    La JVM est totalement transparente pour l'utilisateur si tu inclu une JVM "embarquée" dans ton programme. Pour l'utilisateur, il n'aura qu'a télécharger ou dézipper un fichier pour que le soft fonctionne.
    Le fait qu'il y ait une JVM ne gène que ceux qui savent qu'il y en a une !
    Sur la plupart de mes appli, rien n'indique à l'utilisateur que c'est du java car :
    - elles ont un launcher (.exe) avec une icone personnelle
    - J'applique soit le LnF de windows (qui s'adapte à la version de windows présente sur le poste client), ou un LnF particulier (je n'utilise jamais le LnF de java par défaut)
    - J'utilise une JVM embarquée avec chemin relatif (pas de problème de compatibilité ou de methode dépreciée dans le temps, la JVM est la même que celle utilisée lors de la compilation).

    Après cela, avec quoi l'utilisateur va t-il voir une différence entre mon appli java et une autre ?
    Va -t-il se plaindre de l'utilisation d'une JVM, et en quoi cela pourrait bien le déranger ?
    Citation Envoyé par Claude URBAN
    Le coté portable d'un programme est une excellente chose, certes, mais pourquoi ne pas avoir le choix. S'il y a la demande… et je pense qu'elle existe.
    Le choix ?
    C'est justement parce que java est multi-plateforme qu'on a le choix de d'executer une même appli sur des plateformes différentes !
    Je vois difficilement comment avoir plus le choix !

    Régis. ;-)
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

Discussions similaires

  1. Identifier messages avec PJ pour faire le ménage ?
    Par Graffito dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 05/02/2008, 18h08
  2. [debutant] Quel EDI choisir pour faire des exe autonomes sous Windows ?
    Par damned3 dans le forum Choisir un environnement de développement
    Réponses: 10
    Dernier message: 06/11/2006, 14h00
  3. Réponses: 46
    Dernier message: 04/08/2006, 00h18
  4. Linker un .o avec des archives pour faire un exe
    Par vdumont dans le forum Linux
    Réponses: 4
    Dernier message: 28/03/2006, 22h33
  5. Réponses: 8
    Dernier message: 07/02/2006, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo