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

Lazarus Pascal Discussion :

Diminuer la taille des exécutables [FAQ]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Par défaut Diminuer la taille des exécutables
    Vous avez sans doute remarqué que lazarus compile des executables de taille assez conséquente.
    La raison est la suivante : lazarus compile en incluant les symboles nécessaires au débugguage.
    Pour remédier à celà, lazarus est livré avec un utilitaire nommé strip qui vous permet de vous débarasser de ces octets superflus.
    L'inconvénient de cet utilitaire, c'est qu'il faut le lancer en ligne de commande.
    Heureusement lazarus offre la possibilité d'intégrer ce genre d'utilitaires dans son IDE. Pour celà utilisez le menu :

    menu Outils >> Configurer les outils personnalisés
    puis appuyez sur le bouton :

    + Ajouter
    Remplissez ainsi la fenêtre qui s'ouvre :

    Champ Titre >> Stripper mon projet
    Champ Fichier du programme (sous windows) >> C:\lazarus\pp\bin\i386-win32\strip.exe
    Champ Fichier du programme (sous Linux) >> /usr/bin/strip
    Champ Paramètres >> $(TargetFile)
    Champ Répertoire de travail >> $(ProjPath)
    puis cocher l'option Rechercher les messages de sortie de FPC
    puis cocher successivement Ctrl, Alt, Shift
    Champ touche choisir 'S'
    Validez votre choix deux fois par ok.

    Grace à cette petite manipulation, le menu outils vous donne accès à une nouvelle fonction nommée Stripper mon projet qui peux reduire considérablement la taille du fichier généré... (après compilation).
    Cette fonction est accessible aussi par le racourci clavier :

    Dommage pour ceux qui tapent à deux doigts...


    PS:
    La même manipulation peut-être faite avec le programme UPX. cependant, si celui-ci compresse la taille du fichier sur votre disque, il le décompresse en mémoire au moment de l'utiliser. A vous de voir si vous souhaitez l'utiliser


    Bonne programmation

    Clandestino

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Par défaut
    Merci de l'info. je faisais tout cela en mode console !

    Je vais paramétrer l'IDE pour integrer Strip et UPX . car mes executables de 8M.... pas terribles..

    Même si UPX decompresse en mémoire ça prend moins de place sur disque et plus facile à proposer en téléchargement

    autre point ( j'utilise assez souvent freepascal avec votre outil minipascal et là c'est super pratique quand je teste des petits bouts de code.


    JoseF

  3. #3
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Par défaut
    Hello

    Je viens justement de faire cette triste découverte également : un simple Hello world (ou plutôt un coucou, chez moi), compilé sur un serveur linux avec FPC 2.0.4, fait quand même 105 KB !

    Je connaissais ce problème avec Gnat, un compilateur Ada... et j'espérais secrêtement, ayant de bon souvenir de la taille des exe produit par TurboPascal, que FPC ferait peut-être aussi bien, et serait un bon substitut à Gnat.

    Malhreusement non.

    J'ai essayé les méthodes que vous donnez ici, et les 105 KB que j'obtiens pour un programme qui ne contient rien d'autres qu'un WriteLn ('Coucou '); sont beaucoup trop.

    Comme la solutions donnée ici n'aboutit à rien de bon : est-ce que quelqu'un(e) connais la cause de la grande taille des exe produit par FPC ? Est-ce que c'est la runtime ? Et si oui, existe t-il des runtimes alernatives pour produire des exe plus petits ?

    Comprendre et connaître la cause du phénomène aiderait beaucoup, et c'est sûrement cela qui manque.

    Bye-bye

  4. #4
    Membre expérimenté Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Par défaut
    Bonjour,
    105KB pour writeln('coucou') ?
    Je suis étonné !!
    Je viens de faire des testes ;
    Quand on compile par la ligne de commande, comme je l'ai toujours fait, il n'y a pas d'information de débogage enregistrés. Donc ton exécutable "coucou" ne prend pas plus de 30KB.
    Si tu tiens absolument à utiliser l'IDE, il te suffit d’aller sur options>>debugger
    En suite tu coches "Strip all debug symbols from executable".
    Le tour est joué.

  5. #5
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Par défaut
    Bonjour Ultima, et merci pour ta réponse.

    Je n'utilise pas l'IDE, car j'eccede au serveur via une connextion ssh, et ce genre d'environnement ne permet pas toujours d'executer ce d'application.

    Donc je compile en ligne de commande, et mon fichier fpc.cfg indique les options suivante :
    • -Og2p1 i.e. Optimise pour le taille (sans les optimisations non-sûres) et pour le i386/486).
    • -Xs i.e. Strip tout les symbole de l'executable produit.
    • -Mtp i.e. compatibilité Borland TP7
    • -Rintel i.e. assembleur Intel (mais je ne pense pas que ça ai une influance sur le code produit)
    • -Sgt (sans influance sur la taille du code)
    • -l l'option -l n'est pas présente (d'ailleur je n'ai jamais vu de logo texte FPC apparaître au lancement du programme)
    • -XD J'ai essayé l'option -XD (smart linking), mais ça ne donne rien. Peut-être que je devrais recompiler la unit system avec cette option... Avec quelles options a été compilé ta unit system chez toi ?


    (EDIT 20 apr 2007 17:13 GMT+2 - le SmartLinking se commande avec l'option -XX, et non pas l'option -XD comme je l'ai cru par erreur - la solution se trouve finalement là - voir deux post plus bas pour tout les détails)

    Quel est le contenu de ton fichier fpc.cfg ? Est-ce que tu pourrais me le transmettre ?

    Ensuite je restrip en ligne de commande (ce qui ne réduit pas la taille de l'exe).

    Je n'utilise aucun framework (évidement), et donc le problème ne vient pas de là.

    Etant donné que c'est pour du CGI, le temps de chargement est important pour moi.

    Par contre j'ai appris, et j'ai vérifié, que les exe produit sont en liaison statiques... et pour le coup, un exe en liaison statique qui fait cette taille, c'est déjà un peu plus raisonnable (peut-être la RTL est implémenté avec les syscalls du kernel) et cela améliore certainement le temps de chargement.

    Mais malgré tout, c'est étrange.

    J'ai appris que si la RTL de Freepascal prend de la place, c'est à cause du texte des messages d'erreur qu'elle contient et des fonctions d'internationalisation. Mais pour des CGI, je ne veux pas que si me reposer sur le traitement standard des erreurs... et on comprend bien qu'un CGI qui plante, a mieux a faire que de renvoyer un message de runtime error sur le flux de sorti Alors si je pouvais l'éliminer, ce n'en serait que mieux pour deux raisons (raison de taille et raison de logique). Idem pour les fonctions d'internationalisation qui ne concerne pas un CGI (les CGI, même s'ils sont concernés par cet aspect, le gère autrement : il internationalise pour le visiteur d'un site, et non pas pour l'utilisateur d'un OS).

    Peut-être qu'en allant dans le code de System.pas je pourrais retirer ces quelques fonctionalité qui ne sont pas les bienvenues pour un CGI (surtout la partie de code de traitement par défaut des erreurs.. qui ne convient pas du tout pour un CGI).

    Note :

    J'ai quand même put installer FPC sur mon serveur, en ayant aucun droit root ni autre chose. Il m'a suffit de copier les fichier dans un repertoire, d'ajouter une variable PPC_CONFIG_PATH qui est initilisé dans mon .bash_login, d'écrire le fichier de configuration avec les chemin vers les fichiers nécéssaire au bon fonctionnement de FPC, et ça marche parfaitement (sauf l'IDE qui ne fonctionne pas, mais ça fait bien longtemps que je n'en utilise plus... parce gdb, c'est pas mon truc... le debugger de Borland TP était bien meilleur).

    Pour le coté facilité d'installation, FreePascal est une merveille : il n'a aucune dépendence, et produit des executable qui n'ont pas non-plus de dépedance. Comparé au compilateur Ada, Gnat, que je me suis arraché les cheveux pendant plusieurs semaines à essayer de l'installer... FreePascal est vraiment une crème, et je suis bien content d'avoir trouvé une alternative (Pascal n'est pas aussi formel que Ada... mais c'est suffisement pour les CGI que je prévois de programmer).

    Alors malgré le problème de la taille des exe : vive FreePascal

    P.S. Il semble que ce topic soit lié à celui-ci également
    http://www.developpez.net/forums/sho...d.php?t=201095
    j'y ai trouvé un lien interessant :
    http://wiki.freepascal.org/index.php/Size_Matters
    ... mais qui est quand même un peu naïf sur certain point (je suis désolé de contredire l'auteur de cette page, mais la taille des programme n'est pas faire pour augmenter indéfiniment... et il y a un ras-le-bol général sur la notion de toujours-plus qui nous pollu la vie... alors je ne pense pas que cette exigence soit une maladie mentale, comme il semble le dire à mi-mot)

  6. #6
    Membre expérimenté Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Par défaut
    Bonjour,
    Je crains de ne pouvoir t’aider ;
    Mais voici mon fichier fp.cfg (je crois que le fichier fpc.cfg est le mm pour tt le monde):
    # Automaticly created file, don't edit.
    #IFDEF NORMAL
    -TWin32
    -Sg
    -Mfpc
    -O1
    -OG
    -Op3
    -Ratt
    -FuC:\FPC\2.0.4\units\i386-Win32
    -FuC:\FPC\2.0.4\units\i386-Win32\*
    -FuC:\FPC\2.0.4\units\i386-Win32\rtl
    -g-
    -p-
    -b-
    #ENDIF

    #IFDEF DEBUG
    -TWin32
    -Sg
    -Mfpc
    -Cr
    -Ci
    -Co
    -OG
    -Op3
    -Ratt
    -FuC:\FPC\2.0.4\units\i386-Win32
    -FuC:\FPC\2.0.4\units\i386-Win32\*
    -FuC:\FPC\2.0.4\units\i386-Win32\rtl
    -Xs
    -g-
    -p-
    -b-
    #ENDIF

    #IFDEF RELEASE
    -TWin32
    -Sg
    -Mfpc
    -O1
    -O2
    -OG
    -Op3
    -Ratt
    -FuC:\FPC\2.0.4\units\i386-Win32
    -FuC:\FPC\2.0.4\units\i386-Win32\*
    -FuC:\FPC\2.0.4\units\i386-Win32\rtl
    -g-
    -p-
    -b-
    #ENDIF


Discussions similaires

  1. [XE3] Taille des exécutables
    Par Higgins dans le forum EDI
    Réponses: 13
    Dernier message: 16/07/2013, 13h55
  2. Réponses: 9
    Dernier message: 05/05/2011, 22h56
  3. [WD11] Taille des exécutables
    Par win_devv dans le forum WinDev
    Réponses: 4
    Dernier message: 30/07/2008, 13h14
  4. Réponses: 11
    Dernier message: 06/03/2007, 19h18
  5. Pur débutant en C/C++ : Taille des exécutables ?
    Par ChrisPM dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 20/10/2005, 18h39

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