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 :
Citation:
menu Outils >> Configurer les outils personnalisés
puis appuyez sur le bouton :
Remplissez ainsi la fenêtre qui s'ouvre :
Citation:
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...:mouarf:
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
Bonne nouvelle, Heureuse nouvelle ...
Une réponse si vite :D
Entre temps, j'ai trouvé LA solution, qui va peut-être interesser beaucoup de monde, ouais :P
Il faut utiliser l'option -XX, car c'est l'option -XX qui commande le SmartLinking, et non pas l'option -XD, comme je l'ai cru par erreur.
J'ai compilé avec l'option -XX, et sans même avoir recompilé les unités standard, mon application de teste est déscendu à 21 KB :king: Rien à redire, c'est parfait... (je ferais quand même une version nettoyé de system.pas, pour les CGI).
Info : Qu'est-ce le SmartLinking ? C'est une idée formidable, et dont il étonnant que seul TurboPascal et FreePascal la connaisse. L'idée est simplement qu'un fichier objet contient beaucoup de chose, et qu'une application liée à tel ou tel fichier objet, n'a pas toujours besoin de lier tout le contenu du fichier objet. TurboPascal avait un format spécial, les TPU, qui permettait de ne lier que ce qui était effectivement référancé par une application.
Je me souviens que je trouvais cette propriété tout à fait appréciable est logique (TurboPascal n'appelait pas ça SmartLinking, et n'avait en fait pas donné de nom spécial à ce concept). J'y était tellement habitué que quand je suis passé à Borland C++, et que j'ai découvert la médiocrité du format obj, j'ai été déçu. Pour obtenir le même effet de liaison intelligente qu'avec les TPU de TurboPascal, je devais compiler des multitude de petits fichiers. C'est à dire que je découpais mes fichier source, en source-1, source-2, etc, etc... chacun contenant seulement une fonction, ou seulement une variable globale. Il va sans dire qu'avec TurboPascal et FreePascal, les choses sont beaucoup plus simple est plus logique. Et c'est étonnant que ces deux compilateurs soient les deux seuls à implémenté cette logique pourtant évidente (comme quoi, il y a beaucoup de gens qui ne se posent pas assez de question).
Une petite différence entre TurboPascal et FreePascal : sous TurboPascal, ce comportement était un comportement par défaut, tandis que sous FreePascal, il faut activer une option pour obtenir le même résultat.
Ainsi donc, je conseille à chacun(e) d'ajouter l'option -XX au fichier de configuration fpc.cfg
Grâce à cette caractéristique ingénieuse, TurboPascal et FreePascal sont de tous les compilateurs, ceux qui produisent les binaires les plus économes. Et pensez donc : ils sont même en liaison statiques en plus! Un Must.
Mais je vais quand-même étudier ta configuration, ça peut être interessant... parce que je découvre le nouveau FPC depuis aujourd'hui... je le connaissais il y a « trés » longtemps (en 1997 je crois), mais il était bugé à l'époque (je l'avais patché, mais comme je n'avais pas d'accès à internet, je n'avais pas put participer à son dévelloppement). En plus, j'étais sous Windows3.1 à l'époque, et il ne permettait pas de programmer pour Windows3.1, mais seulement pour DOS ou Windows95... alors je l'avais abandonné.
Je suis heureux de voir que ce projet commencé il y a longtemps, soit toujours vivant, et qu'il ait bien avancé. Et comparé à d'autres environnement, il est même assez léger (l'installation de base sous Windows fait 20 Méga chez moi, contre 50 Méga pour l'installation de base de Gnat-315p, le compilateur Ada). Le seul défaut de FreePascal à mon avis, c'est gdb... il manque un vrai débuger intégré à l'IDE... mais à vrai dire, on developpe très bien sans débugger aussi... et je ne pense pas que beaucoup de gens en utilise, en dehors des phases d'apprentissage.
Bon, bon, j'ai été très long encore, mais c'était pour apporté une bonne nouvelle, quelques infos utils, et chanter quelques bonne louanges bien méritées... alors j'espère qu'on me pardonnera :)
A bientôt tout le monde, et portez vous bien :D
Quelques solutions personnelles
Voici quelques solutions personnelles pour utiliser les outils externes.
J'ai utilisé lazarus snapshot version win32.
- D'abord pour obtenir du code assembleur
J'ai essayé d'utiliser des macros pour permettre une utilisation la plus générale possible. (Pour savoir si ça marche sur d'autre OS il faut tester et corriger si nécessaire !).J'ai juste opté pour un processeur cible PENTIUM4
Citation:
Champ Titre >> Code Assembleur
Champ Fichier du programme (sous windows) >> C:\lazarus\fpc\2.2.5\bin\i386-win32\ppc386.exe
Champ Fichier du programme (sous Linux) >> ???
Champ Paramètres >>-MObjFPC -Scgi -CX -O3 -OoUNCERTAIN -OoREGVAR -OpPENTIUM4 -T$TargetOS() -P$TargetCPU() -gl -Xs -XX -WG -vewnhi -l -Fu$ProjUnitPath() -FE$ProjPath() -o$(TargetFile) -al -dLCL -dLCL$LCLWidgetType() $ProjFile()
Champ Répertoire de travail >>
puis cocher l'option Rechercher les messages de sortie de FPC
puis cocher successivement Ctrl, Shift
Champ touche choisir 'A'
Les fichiers en assembleur portent l'extension .s (ouvrez le avec un éditeur de texte), pour obtenir ce fichier l'option indispensable de compilation était
-al (list sourcecode lines in assembler file) - Faire un strip de l'exécutable du projet
Le but est de réduire la taille de l'exécutable(explications dans le 1er post donc je développe pas)
Citation:
Champ Titre >> strip sur mon projet
Champ Fichier du programme (sous windows) >> C:\lazarus\fpc\2.2.5\bin\i386-win32\strip.exe
Champ Fichier du programme (sous Linux) >> ???
Champ Paramètres >>--strip-all $(TargetFile)
Champ Répertoire de travail >> $(ProjPath)
puis cocher l'option Rechercher les messages de sortie de FPC
puis cocher successivement Ctrl
Champ touche choisir 'S'
La fenêtre message de Lazarus affiche
Citation:
"strip sur mon projet" terminé
- Action d'UPX sur l'exécutable du projet
Le but est de réduire la taille de l'exécutable(explications dans le 1er post donc je développe pas)
Citation:
Champ Titre >> UPX sur mon projet
Champ Fichier du programme (sous windows) >> C:\lazarus\fpc\2.2.5\bin\i386-win32\upx.exe
Champ Fichier du programme (sous Linux) >> ???
Champ Paramètres >>--best $(TargetFile)
Champ Répertoire de travail >> $(ProjPath)
puis cocher l'option Rechercher les messages de sortie de FPC
puis cocher successivement Ctrl
Champ touche choisir 'U'
La fenêtre message de Lazarus affiche
Citation:
Note: Switching assembler to default source writing assembler
"Code Assembleur" terminé