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

C++ Discussion :

compilation-link influence sur l'exe ?


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut compilation-link influence sur l'exe ?
    Salut à tous, j'ai une question sur wxwidgets/prog en general. j'ai découvert cette librairie depuis deux semaines, et elle est vraiment pas mal, elle présente beaucoup d'avantages (gratos, protable, simple, très documentée..... ). Seulement j'ai une question, meme un exe de base (sans frame) que je fais (avec wxdevcpp) avec wxApp, il fait au moins 3.8Mo et utilise au moins 3.5Mo en mémoire. Alors est ce que c'est intrinseque à la librairie ou bien est ce que c'est parce que de base wxdevcpp charge TOUTES les libraires dans le makefile pour le compilation?
    en gros est ce que dans un programme si lors de la compilation dans le make file je lui rajoute un tas de librairies (-llib1.... -llib600) dont il n'a pas besoin, est ce que dans l'exe au link il va intégrer ces éléments ou bien au link intègre ce dont il a besoin pour faire l'exe? tout à l'heure je faisais juste un

    .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "main.h"
     
    IMPLEMENT_APP(MyApp)
     
    bool MyApp::OnInit()
    {
          MessageBox(NULL,"programme minim","",0);
          return true;
    }
    et le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "wx/app.h"
     
    class MyApp: public wxApp
    {
    public:
    	virtual bool OnInit();
     
    };
    et l'exe faisais 3.8Mo et une consommation de 3.5Mo memoire :/
    or j'ai trouvé un prog sur le net fait en wxwidgets qui faisait 700ko (mais qui chargait 3.5 en memoire mais là il y avait des fenetres et tout)
    Merci pour d'éventuelles explications

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si wxWidgets est lié statiquement ton executable peut facilement faire 3.5 Mo, s'il est lié dynamiquement (ie. il faut la DLL à côté) ton exe sera forcément d'autant moins lourd.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Es-tu en mode debug?

    Ici, j'ai une application avec wxwidgets qui est en fait un client de chat, avec menu, textview, boutons, etc, et les sockets: le programme fait 99 kb en release, et 292 kb en debug.

    Compilateur: gcc

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    non pourtant je ne suis pas en debug, enfin il me semble... je compile normalement... tu compiles avec gcc, avec un IDE genre dev? ou tout à la main? quel os?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je ne crois pas que l'ide fasse une difference. J'utilise un makefile, sous linux, avec gcc version 3.4.4 et binutils 2.16.1

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    comment tu spécifies alors dans tin makefile de compiler en release?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    Citation Envoyé par Loulou24
    Si wxWidgets est lié statiquement ton executable peut facilement faire 3.5 Mo, s'il est lié dynamiquement (ie. il faut la DLL à côté) ton exe sera forcément d'autant moins lourd.
    ben non puisque l'exemple que j'ai récupéré sur le net n'est pas lié dynamiquement, j'ai pas les dll des lib et ça s'execute...
    par contre visiblement c'est compilé avec visual, peut etre que ça viendrai du compilateur :

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Tu ne sais pas lire reptils ?
    Je dois avouer que ta réponse au message que tu cites est déroutante.

    Je vais essayer de récapituler.
    Si c'est lié dynamiquement, l'executable a une taille réduite mais nécessite que la bibliothèque soit déjà installée sur le système sous une forme partagée (dll, so...)
    Si c'est lié statiquement, l'executable a une taille importante tout simplement parce que la bibliothèque est embarquée.

    Dans ton cas, manifestement, tu lies la bibliothèque de façon statique, d'où la taille importante de ton executable.
    Boost ftw

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par reptils
    comment tu spécifies alors dans tin makefile de compiler en release?
    Comme je le ferais a la main. Gcc compile en "release" par defaut, et en debug si on lui passe la switch -g

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    ok d'accord, alors sur windows et linux gcc/g++ doit avoir un comportement different sinon je pense que le probleme de la taille de l'exe vient proincipalement du compilateur...
    je suis tombé là dessus -> http://www.wxwidgets.org/wiki/index.php/Reducing_Executable_Size
    ils parlent du fait de privilégier visual à gcc

    par contre visiblement pour la consommation mémoire c'est pareil pour toute les sources que j'ai téléchargé, au environ de 3-4Mo.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par reptils
    ok d'accord, alors sur windows et linux gcc/g++ doit avoir un comportement different sinon je pense que le probleme de la taille de l'exe vient proincipalement du compilateur...
    Non!
    Tu as toi meme mentionne que les librairies etaient linkee statiquement. C'est suffisant pour expliquer que l'executable soit plus gros

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    non!!!
    regarde l'exemple que je te donne en link ICI l'exe fait 700ko, et mes librairies wxwidgets sont statiques... et concernant la memoire? toujours pas de réponse?

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par reptils
    non!!!
    regarde l'exemple que je te donne en link ICI l'exe fait 700ko, et mes librairies wxwidgets sont statiques... et concernant la memoire? toujours pas de réponse?
    Jus-te-ment.

    Quelle partie de "librairie statique <=> gros exécutable" ne comprends-tu pas ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    et bien l'exemple que je donne dans le post précédant en téléchargement n'est pas linké en dynamique donc il est en statique et pourtant l'exe ne fait que 700ko!!! alors que de base l'exemple que je donne cette fois ci écrit plus haut lui fait 3Mo je ne comprend pas comment on peut avoir une telle différence:
    - exemple.rar, petit exe et pourtant linké en statique.

    - exemple plus au avec MyApp sans fenetre sans rien fait 3.5Mo (aussi en statique)

    suis-je clair?

  15. #15
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Sous linux il existe la commande strip qui suprimme les symboles inutilisés des programmes http://www.hmug.org/man/1/strip.php.

    Peut être que tes programmes de 700Ko sont passés par une opération similaire.

    EDIT : Chez moi un executable de 2,1Mo prend 1Mo apres le passage de strip.
    J'aime pas les épinards... Mais alors pas du tout

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    ok je vais tester ça, merci...

  17. #17
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Essaye de prendre dev-cpp normal, d'installer les 3 devpak suivant :
    - imagelib
    - wxWindows 2.4.2
    - wxWindows 2.4.2-contrib
    disponibles sur http://michel.weinachter.free.fr/ en haut.

    une fois téléchargés, va dans dev-c++ : Outils/Package Manager
    Clique sur Install en haut.
    Tu vas chercher tes 3 fichiers dans le même ordre que précédemment.
    voilà donc wxwidgets bien installé...

    A la compilation désormais tu auras un exécutale d'environ 500ko, plus ou moins

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    le strip me fait économiser 500ko avec -S -X -x, je ne vois quels sont les options exacts pour faire un nettoyage complet...

  19. #19
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    a quoi voix tu que le linkage est statique ?
    je ne vois rien qui permette de spéculer la dessus ?

    et pour repondre au fait qu'il faille privilégier visual (enfin son compilateur "cl" ) a gcc vient certainement du fait qu'au niveau optimisation (suite ordonnée des instructions assembleur et apres binaire) est bien plus performente avec l'outil M$, hélas...
    "vaste programme"

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    Citation Envoyé par BainE
    a quoi voix tu que le linkage est statique ?
    je ne vois rien qui permette de spéculer la dessus ?
    Je me lance (à nouveau) dans la prog, donc mon expérience est peut etre limitée. Mais il me semble que si c'était linké en dynamique je devrais me trimbaler les dll de wxWidgets pour que mon programme marche (il me semble) et je n'ai que les libraires en statique chez moi et chez d'autres personne qui n'ont aucun outils de developpement encore moins des librairies de wx ça passe aussi. Alors à moins que linker en dynamique veuille dire récupérer les fonctions depuis une dll et les intégrer dans l'exe, mais dans ce cas je ne vois pas l'intéret de la librairie dynamique par rapport à la statique.

    Citation Envoyé par BainE
    et pour repondre au fait qu'il faille privilégier visual (enfin son compilateur "cl" ) a gcc vient certainement du fait qu'au niveau optimisation (suite ordonnée des instructions assembleur et apres binaire) est bien plus performente avec l'outil M$, hélas...
    oui ben je ne dis pas le contraire, mais visiblement d'après le lien que je donne au post précédant, ça permettrait d'obtenir une plus petite taille d'exe et c'est ce qui m'interesse, apres au final, savoir quel compilateur m'a compilé mon programme je m'en tape dès que j'ai le résultat voulu...
    sur wx ils disent

    Please do not be surprised if MinGW produces a statically-linked minimal executable of 1 MB. Firstly, gcc produces larger executables than some compilers. Secondly, this figure will include most of the overhead of wxWidgets, so as your application becomes more complex, the overhead becomes proportionally less significant. And thirdly, trading executable compactness for the enormous increase in productivity you get with wxWidgets is almost always well worth it.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VB] COmment compiler une dll dans un exe (zlib.dll)
    Par Khrysby dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/11/2005, 12h10
  2. [GCC]Probleme compilation FLAT BINARY sur windows
    Par Hexanium dans le forum Autres éditeurs
    Réponses: 10
    Dernier message: 24/07/2005, 18h07
  3. [CR9] Erreur sur crw32.exe
    Par claude dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 30/11/2004, 15h13
  4. Informations sur un exe (dans les propriétés windows)
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 06/07/2004, 18h20
  5. [icone]Comment appliquer une icone sur le.exe
    Par JavaLeDirePartout dans le forum JBuilder
    Réponses: 7
    Dernier message: 24/07/2003, 17h28

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