Ausführbare Datei schlanker machen..... Wie ?



  • Also ich komme aus der windowswelt bin auf Linux umgestiegen und nutze seit einiger zeit den gcc und habe auch in asm einige erfahrung. Was mich interessiert ist ob es bei dem gcc auch eine möglichkeit gibt den code schlanker zu machen ?
    erläuterung:
    bei win (VC++) konnte man eine "normale" version und eine release version erstellen vom ausführbaren programm was bei weitem kleiner war. Gibt es eine solche möglichkeit auch für GCC ?

    Es geht mir darum das ich ein programm direkt in einen sektor (512B) schreiben will und nicht mit asm arbeiten möchte da dies wieder mehr zeit in anspruch nimmt 🙄 😃 ..... hoffe ihr habt eine lösung für mich ....

    in asm sind es so 300 B und in GCC bei weitem mehr, deshalb meine frage.

    hoffe ihr könnt mir helfen
    EinLinuxNutzer



  • EinLinuxNutzer schrieb:

    Also ich komme aus der windowswelt bin auf Linux umgestiegen und nutze seit einiger zeit den gcc und habe auch in asm einige erfahrung. Was mich interessiert ist ob es bei dem gcc auch eine möglichkeit gibt den code schlanker zu machen ?
    erläuterung:
    bei win (VC++) konnte man eine "normale" version und eine release version erstellen vom ausführbaren programm was bei weitem kleiner war. Gibt es eine solche möglichkeit auch für GCC ?

    Es geht mir darum das ich ein programm direkt in einen sektor (512B) schreiben will und nicht mit asm arbeiten möchte da dies wieder mehr zeit in anspruch nimmt 🙄 😃 ..... hoffe ihr habt eine lösung für mich ....

    in asm sind es so 300 B und in GCC bei weitem mehr, deshalb meine frage.

    hoffe ihr könnt mir helfen
    EinLinuxNutzer

    1. gcc ist 32bit
    2. bootsector progs sind 16bit
          1. = 👎

    okay?

    Falls du aber normale progs schlanker machen willst, dann machste es so:

    übergib beim compilen zusätzlich die Option "-O2" (ohne " ")

    udn nach dem compilen machste das:
    strip progname

    progname ist der name der ausführbaren datei



  • blaaaa schrieb:

    Falls du aber normale progs schlanker machen willst, dann machste es so:

    übergib beim compilen zusätzlich die Option "-O2" (ohne " ")

    O3 optimiert noch aggressiver, aber eigentlich wäre -Os besser, denn das optimiert auf größe.

    udn nach dem compilen machste das:
    strip progname

    das geht auch während dem kompilieren, indem man dem Compiler das -s Flag mitgibt. ACHTUNG: Das killt alle Debugging-Symbole in dem Binary!!

    MfG

    GPC



  • ich haenge meine frage, die ich nun schon seite laengerem habe, einfach mal hier ran:

    wenn ich mein programm mit normalem -O optimieren will, dann bekomme ich speicherzugriffsfehler bei der ausfuehrung.

    ist es nun eine macke vom gcc oder ist mein programm schlampig programmiert?



  • Moh schrieb:

    ist es nun eine macke vom gcc oder ist mein programm schlampig programmiert?

    Lässt sich nicht so pauschal beantworten.

    *rat* Vermutlich zweiteres, könnte aber natürlich auch ersteres sein.



  • was genau optimiert der gcc denn genau? vielleich kann man den fehler ja eingrenzen...



  • Moh schrieb:

    was genau optimiert der gcc denn genau?

    Siehe "info gcc".

    vielleich kann man den fehler ja eingrenzen...

    Klar, der Debugger Deines Vertrauens hilft. 😉



  • -Os -s -nostdlib -fomit-frame-pointers -march=<cpu-type>

    das könnte dir helfen. Aber wenn du einen Bootloader schreiben willst, dann kannst du mit -nodefaultlib und den Linkeroptionen eh noch mehr schaffen, da du ja den ganzen Startupcode selber schreibst und auch kein ELF Zeugs noch benötigst.



  • Wenn es Dir im allgemeinen um kleine Programme geht, dann link Deine Programme gegen die dietlibc[http://www.fefe.de/dietlibc/]. Ich habe damit nur sehr gute Erfahrungen gemacht. Ein statisch gelinktes und gestripptes Hello World hat nur noch eine Grösse von 1,5 KB. Viel kleiner wirst Du Dein Programm in einer Hochsprache kaum bekommen, wenn Du nicht auf die libc verzichten möchtest. Zweiter Vorteil der dietlibc: Meine Programme laufen um 5-10% schneller! Aber das die glibc und besonders die libstdc++ nicht gerade einen zum Weinen vor Freude bringen, ist auch allseits bekannt. 😉

    Ansonsten schau Dir an wie es die Leute von Grub gemacht haben. Die haben erst eine kleine Startroutine die das eigentliche Programm lädt. Aber das ist in Deinem Fall vielleicht mit Panzern auf Tauben geschossen.



  • woher wisst ihr das ich was mit nem bootloader machen will 🙄 .
    da haben mich wohl die 512B verraten 😃
    danke für die vielen antworten. ihr habt mir sehr sehr sehr geholfen.
    hier komme ich öfter her um zu fragen falls ich wieder nen prob hab bzw.
    um eventuell mal selbst helfen zu können. 😃

    EinLinuxNutzer



  • EinLinuxNutzer schrieb:

    woher wisst ihr das ich was mit nem bootloader machen will 🙄 .
    da haben mich wohl die 512B verraten 😃
    danke für die vielen antworten. ihr habt mir sehr sehr sehr geholfen.
    hier komme ich öfter her um zu fragen falls ich wieder nen prob hab bzw.
    um eventuell mal selbst helfen zu können. 😃

    EinLinuxNutzer

    bootloader schreibt man normalerweise in Assembler wegen der seh begrenzten Größen auf 512 bytes. ( Naja, eiegtnlich noch weniger wegen der tabelle )

    Da eigentliche OS ( welches du voraussichtlich schrieben möchtest ) solltest du in einer höheren Sprache schreiben.


Log in to reply