Executable wird zu groß
-
Wenn ich ein einfaches 08/15 C-Programm kompiliere und linke - egal mit welchem Compiler - wird das Executable unverhältnismäßig groß.
#include <stdio.h> int main() { printf("Hallo Welt!\n"); return 0; }
Kompiliert und gelinkt ist das schon ganze 14,332 Bytes groß. Hört sich zwar im Zeitalter von GigaByte wenig an, aber im Vergleich zum selben Programm in Assembler geschrieben, stellen sich mir die Haare auf. Wie kann ein so einfaches Programm so groß sein? Ich vermute mal, dass da noch haufenweise Debug-Informationen mitgespeichert werden. Kann man dagegen irgendetwas tun?
-
Wie kann ein so einfaches Programm so groß sein?
Ganz einfach: Es wird ein Teil der C-Library mit reingelinkt und wie du schon gesagt hast, könnte es Debuginformationen enthalten.
Ich vermute mal, dass da noch haufenweise Debug-Informationen mitgespeichert werden. Kann man dagegen irgendetwas tun?
Kommt drauf an! Beim gcc ohne option -g compilieren oder mit dem tool ``strip"
mfg unixer
-
Also absichtlich habe ich garantiert keine zusätzlichen Debug-Informationen mitgenommen. Wenn ich obiges Programm mit dem Parameter -g kompiliere, ist es sogar fast 18,000 Bytes groß. Diese 14,000 Bytes werden doch nicht das Kleinstmöglich in C sein, oder? Man sagt immer, C sei so eine schlanke, kompakte und schnelle Sprache ...
Andere Frage: Welche Alternativen habe ich, um eine Software zu klein wie möglich zu machen? Nur in Assembler schreiben?
-
wie unixer schon schrieb, strip
bringt dein hello-world auf 4k
-
Hat jemand einen Link zu diesem Programm? Bei Google finde ich nur Müll.
-
In jedem vernünftigen System wie GNU/Linux/BSD befindet sich das Tool man: strip(1). Einfach GNU/Linux installieren und dann hast du ein richtiges Betriebsystem mit richtigen Tools für Programmierer.
strip ist ein Tool von binutils
-
Was macht strip genau?
-
man strip!
dh: klick den link von supertux!
-
lolipop schrieb:
Was macht strip genau?
-
lolipop schrieb:
lolipop schrieb:
Was macht strip genau?
ich verstehe nicht, was du damit sagen willst.
-
lolipop schrieb:
Was macht strip genau?
man strip schrieb:
GNU strip discards all symbols from object files
-
supertux schrieb:
In jedem vernünftigen System wie GNU/Linux/BSD befindet sich das Tool man: strip(1). Einfach GNU/Linux installieren und dann hast du ein richtiges Betriebsystem mit richtigen Tools für Programmierer.
Ich denke, die Wahl des Betriebssystems solltest du lieber mir überlassen.
Wo bekomme ich sonst das Tool "Strip" her?
-
wo hast du denn den gcc her? vielleicht schlummerts ja schon auf deiner festplatte
ansonsten ist das mit sicherheit bei cygwin dabei.
-
Ja, stimmt. Einfach mit dem Parameter -s kompilieren und meine Datei ist "nur" noch genau 5kb groß. Eine weitere Möglichkeit, die Dateigröße zu verringern, gibt es nicht, oder? 5kb sind mir immer noch 3kb zu groß.
-
Welche Lib linkst du denn alles dazu? Ich weiß net welchen compiler du benutzt aber bei Visaul Studio wird ja standardmäßig alle standad bibliotheken mitgelinkt! vielleicht kann man so auch noch ein paar bytes einsparen weiß es aber nicht genau!
MfG schirrmie
-
Ich verwende im Moment den gcc.
-
iostream schrieb:
Wo bekomme ich sonst das Tool "Strip" her?
das findest du im binutiuls. Alleine wirst du es wohl nicht bekommen, weil es ein Teil von binutils ist.
-
Ich hab mir nun diese binutils runtergeladen. Finde aber kein "strip".
-
Du musst es kompilieren und installieren. Was du runtergeladen hast sind die Sources.
$ su - (sich als root einloggen) $ cd /pfad_wo_binutils_source_ist $ ./configure && make && make install
-
iostream schrieb:
Ich hab mir nun diese binutils runtergeladen. Finde aber kein "strip".
Lade dir mal cygwin runter. Da ist es auch dabei.
-
MaSTaH schrieb:
iostream schrieb:
Ich hab mir nun diese binutils runtergeladen. Finde aber kein "strip".
Lade dir mal cygwin runter. Da ist es auch dabei.
das Problem von cygwin (oder zumindest von den alten Versionen) ist, dass wenn das ein Computer kein cygwin hat und eine Datei ausführen will, die unter ne cygwin Umgebung erstellt worden ist, läuft sich nicht.