supprimer le code inutile de gcc andd mingw

J’ai remarqué que mingw ajoute beaucoup de code avant d’appeler main (), j’ai supposé qu’il analysait les parameters de ligne de commande puisqu’un de ces fonctions s’appelle __getmainargs (), et que beaucoup de chaînes sont ajoutées à l’exécutable final, tel que mingwm.dll. et certaines chaînes d’erreur (en cas de blocage de l’application) indiquent une erreur d’exécution mingw ou quelque chose comme ça.

Ma question est la suivante: existe-t-il un moyen de supprimer tout cela? je n’ai pas besoin de toutes ces choses, j’ai essayé tcc (le compilateur C minuscule), il a fait le travail. mais pas de la même façon que gcc (solaris / mac)

des idées?

Merci.

Oui, vous avez vraiment besoin de toutes ces choses. Il s’agit du code de démarrage et de déassembly de l’environnement C dans lequel votre code s’exécute.

Hormis les environnements non hébergés tels que les solutions intégrées de bas niveau, vous constaterez à peu près que tous les environnements C ont quelque chose comme ça. Des choses comme / /lib/crt0.o sous certains systèmes d’exploitation de type UNIX ou crt0.obj sous Windows.

Ils sont essentiels au bon fonctionnement de votre code. Vous pouvez librement omettre des fonctions de bibliothèque que vous n’utilisez pas ( printf , abs , etc.), mais le code de démarrage est nécessaire.


Il peut notamment effectuer l’initialisation des structures atexit , l’parsing des arguments, l’initialisation des structures pour la bibliothèque d’exécution C, l’initialisation des valeurs principales C / C ++, etc.

Cela dépend fortement du système d’exploitation et, s’il y a des choses que vous ne voulez pas faire, vous devrez probablement obtenir le code source et le supprimer, en fournissant essentiellement votre propre remplacement réduit pour le fichier object.

Vous pouvez supposer en toute sécurité que votre chaîne d’outils n’inclut pas de code inutile ni susceptible d’ être omis.

Assurez-vous que vous avez compilé sans informations de débogage et exécutez ssortingp sur le fichier exécutable résultant. N’importe quoi de plus intrusif que cela nécessite une connaissance intime de votre chaîne d’outils et peut entraîner un comportement plutôt étrange qu’il sera difficile de résoudre, c’est-à-dire que si vous devez demander comment cela peut être fait, vous ne devriez pas essayer de le faire.