Je voudrais dépouiller autant que je peux - sur Linux: un ELF. Je veux seulement là-dedans les trucs dont j'ai besoin pour le faire fonctionner.
J'ai essayé d'utiliser strip
:
strip --strip-all elf
Mais cela ne semble pas faire du bon travail: nm
affiche toujours beaucoup de choses, et le binaire est toujours gros.
Que devrais-je faire?
Si tout le reste échoue, vous pouvez lire la documentation, en commençant par man strip
.
Sérieusement, votre application contient peut-être beaucoup de symboles et de code. À un extrême, la plus grande réduction de taille serait rm elf
mais votre programme ne fonctionnera plus. Tout dépend de votre programme et de ce que vous y avez codé.
Comme exemple concret, j'ai récemment travaillé avec une grande bibliothèque C++ où strip
sans autres arguments a réduit la taille de 400 + mb à environ 28 mb. Mais alors vous ne pouviez plus vous lier contre lui (dans le contexte d'autres bibliothèques partagées), le rendant quelque peu inutile.
Mais lorsque vous utilisez strip --strip-unneeded
, il a changé la taille de 400+ Mo à 55 Mo, ce qui est encore considérable, tout en permettant l'accès à la bibliothèque à partir d'autres bibliothèques partagées.
En bref, je ferais confiance à strip
. Peut-être que votre application ne peut pas être réduite davantage sans changements de code.
En utilisant l'option -R pour supprimer, vous pouvez supprimer toutes les sections dont vous n'avez pas besoin. Regardez également this concernant les exécutables ELF minimaux.
Je voudrais consulter cet excellent article qui explique en détail comment rendre un exécutable ELF aussi petit que possible. Peut-être qu'il contient des informations qui pourraient vous aider!
http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
strip -R .comment
gcc -Os elf.c
Ces deux pourraient aider.