Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Wie bekomme ich die Executables kleiner?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.04.2011, 17:44 Uhr
Yadgar



Hi(gh)!

Ich bin mir nicht ganz sicher, ob ich mit meinem Problem hier richtig bin... aber ich wundere mich schon länger, dass selbst ein simples "Hallo, Welt!"-Progrämmchen kompiliert gleich über 400 KB groß ist, wo sowas doch eigentlich mit wenigen hundert Bytes auskommen sollte!

Klar, es wird natürlich die ganze iostream-Bibliothek mitkompiliert - aber muss das zwingend so sein? Gibt es nicht Möglichkeiten, die Kompilate kleiner zu bekommen?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.04.2011, 18:20 Uhr
~f.-th.
Gast


Ist auch abhängig vom Compiler und seinen Möglichkeiten.

Unter welchem Betriebssystem mit welchem Compiler und welchen Compilerschaltern hast du das getestet?
400kb sieht fast wie g++ aus?

Ob da Komprimierer helfen hab ich in letzter Zeit nicht getestet.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.04.2011, 19:25 Uhr
Yadgar



Hi(gh)!


Zitat von ~f.-th.:

Unter welchem Betriebssystem mit welchem Compiler und welchen Compilerschaltern hast du das getestet?



Unter Windows XP, mit Dev-CPP, Standardeinstellungen!


Zitat von ~f.-th.:

400kb sieht fast wie g++ aus?



Ist auch g++!

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.04.2011, 19:48 Uhr
0xdeadbeef
Gott
(Operator)


Das wird was Dev-Cpp-spezifisches sein; wahrscheinlich linkt der irgendwas großes statisch rein. Bei mir (Debian, gcc 4.5.2) bekomme ich für ein einfaches "Hello, world."-Programm eine Executable von 8441 Byte mit -O2. Mit -Os und strip komme ich runter auf 5264 Byte.

Du solltest dir wahrscheinlich eine IDE suchen, die noch weiterentwickelt wird; diese hätte dann auch keinen sechs Jahre alten Compiler. Womöglich haben neuere Versionen des MinGW-gccs ein besseres Verhalten drauf.

Nachtrag: Nein, haben sie nicht. Der MinGW-Crosscompiler spuckt mir eine knapp ein Megabyte große .exe aus (gestrippt gut 500K). Da wird irgendeine große, monolithische Bibliothek statisch verlinkt. Vermutlich will man um die Windows-DLL-Hölle herumkommen.

Nachtrag 2: Jupp, liegt alles nur als statische Bibliothek da. Betroffen sind libstdc++, libmingw32, libgcc, libmoldname, libmingwex, msvcrt, user32, kernel32, advapi32 und shell32. Der Linker wählt zwar nur die Bibliotheksteile aus, die er braucht, um Abhängigkeiten aufzulösen, aber die iostreams-Bibliothek zieht die C-I/O-Bibliothek, die wiederum den halben restlichen Kram zieht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 18.04.2011 um 19:57 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.04.2011, 20:40 Uhr
~f.-th.
Gast


Ich weiss nicht wie du die C++ Möglichkeiten nutzt.

Hab das gerade noch mal durch den Digital Mars 8.50 mit STL-port 4.5.3 geschickt wie Code::Blocks 10.05 den ohne Änderungen ansteuert, da ist die .EXE geringfügig kleiner ( 404kB ).
Wenn ich mich recht erinnere Digital Mars ohne STL müsste deutlich kleiner sein.
Es gibt aktuellere STL-port Versionen. Aber, wenn ich nix übersehen hab, braucht man da eine spezielle make-Version um das zu übersetzen. Welche Einfluss das auf die Grösse der ausführenden Datei hat?

Open Watcom hab ich jetzt nicht getestet. Aber da ist die STL auch noch weniger umfangreich wie beim gcc.

Der alte free BCC 5.5 baute das mit seiner STL etwa 50kB gross.

Wenn du da einen C-"hello world" durch den gcc schickst, ist das Ergebnis sehr viel kleiner.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.04.2011, 21:46 Uhr
Yadgar




Zitat von 0xdeadbeef:
Das wird was Dev-Cpp-spezifisches sein; wahrscheinlich linkt der irgendwas großes statisch rein. Bei mir (Debian, gcc 4.5.2) bekomme ich für ein einfaches "Hello, world."-Programm eine Executable von 8441 Byte mit -O2. Mit -Os und strip komme ich runter auf 5264 Byte.



Das ist zwar schon bedeutend kleiner, aber für so eine einfache Aufgabe (elf Zeichen auf den Bildschirm bringen) immer noch ganz schön fett...


Zitat von 0xdeadbeef:

Du solltest dir wahrscheinlich eine IDE suchen



IDE? Ich kenne das nur als Bezeichnung für ein Nostalgie-Festplattenbussystem... meinst du so etwas wie "Interactive Development Environment"?


Zitat von 0xdeadbeef:

Vermutlich will man um die Windows-DLL-Hölle herumkommen.



Aha, also doch wieder der übliche Windoof-Murks! Normalerweise bin ich ja mit Linux unterwegs, aber mein Freund hier, bei dem ich bis Ostermontag zu Besuch bin, fährt nur Windows...

Aber da Dev-CPP ja auch auf gcc aufsetzt, müssten die von dir genannten Schalter doch auch funktionieren?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog

Dieser Post wurde am 18.04.2011 um 21:46 Uhr von Yadgar editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.04.2011, 22:14 Uhr
Hans
Library Walker
(Operator)


Hi,


Zitat von Yadgar:

[ quote 0xdeadbeef ]
Du solltest dir wahrscheinlich eine IDE suchen
[ / quote ]

IDE? Ich kenne das nur als Bezeichnung für ein Nostalgie-Festplattenbussystem... meinst du so etwas wie "Interactive Development Environment"?


letzteres meint er.


Zitat von Yadgar:

[ quote 0xdeadbeef ]
Vermutlich will man um die Windows-DLL-Hölle herumkommen.
[ / quote ]

Aha, also doch wieder der übliche Windoof-Murks! Normalerweise bin ich ja mit Linux unterwegs, aber mein Freund hier, bei dem ich bis Ostermontag zu Besuch bin, fährt nur Windows...

Aber da Dev-CPP ja auch auf gcc aufsetzt, müssten die von dir genannten Schalter doch auch funktionieren?



Das solltest du ausprobieren.

jetzt noch zum Open Watcom:
beim Open Watcom wird die Datei mit Standardeinstellungen: 23256 Byte gross;
mit diversen Optimierungen: 3584 Byte.
Der springende Punkt dabei ist, die Auswahl der Runtime Library als DLL.
Aber wie 0xdeadbeef oben ja schon beschrieben hat, baut MinGW die gesammte Bibliothek als statisches Gebilde in die exe-Datei ein. Dadurch wird sie dann so lang. Und bei gcc unter Linux lässt sich einstellen, ob die RunTimeLibrary dynamisch oder statisch gelinkt werden soll.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 18.04.2011 um 22:18 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.04.2011, 23:46 Uhr
ao

(Operator)



Zitat von Yadgar:

Zitat:
Das wird was Dev-Cpp-spezifisches sein; wahrscheinlich linkt der irgendwas großes statisch rein. Bei mir (Debian, gcc 4.5.2) bekomme ich für ein einfaches "Hello, world."-Programm eine Executable von 8441 Byte mit -O2. Mit -Os und strip komme ich runter auf 5264 Byte.



Das ist zwar schon bedeutend kleiner, aber für so eine einfache Aufgabe (elf Zeichen auf den Bildschirm bringen) immer noch ganz schön fett...

Egal wie einfach die Aufgabe ist - bestimmte Initialisierungen werden immer gemacht. Wenn du genau wissen willst, wo der Speicher bleibt, dann sieh mal, ob du ein .map-File generieren kannst. Da steht jedes verbrauchte Byte verzeichnet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.04.2011, 17:06 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Also VS 2008 liefert da mit Standard Projekt Einstellungen ne 7KB Exe

Hatte jetzt keine Lust da die Projekteigenschaften nach weiteren Optimierungsmöglichkeiten zu durchsuchen zumal ich mich damit´auch nicht so auskenne
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.04.2011, 00:28 Uhr
0xdeadbeef
Gott
(Operator)


Mit IDE meine ich eine "Integrated Development Environment". Im Wesentlichen ein Editor, der an einen Compiler angebunden ist und Hilfestellung beim Projektmanagement leisten kann. Wobei da in der Praxis üblicherweise noch ein Haufen mehr oder weniger nützliches Zeug dazukommt - Wizards, GUI-Editoren, derartiges Zeug.

Dass der MinGW-gcc so viel größere Binaries als der Linux-gcc ausspuckt, wird daran liegen, dass gcc ursprünglich nicht für Windows entwickelt wurde und das MinGW-Projekt eine Menge Kompromisse eingehen musste, um seine Produkte unter Windows zuverlässig lauffähig zu halten. Libstdc++ unter Windows dynamisch zu linken ist nur begrenzt sinnvoll, wenn man nicht erwarten kann, dass GNUs libstdc++ auf den Host-Systemen verfügbar ist. Dazu kommt, dass der Windows-Linker radikal anders funktioniert als sein UNIX-Gegenstück - beim statischen Linken eine Auswahl der benötigten Bibliotheksteile zu finden, fällt ihm gelegentlich schwer. Seit einem Sicherheitsupdate vom 12.4. für MSVC 2008 wächst dein Programm, wenn du die MFC statisch linkst, beispielsweise um 1,2 MB, unabhängig davon, welche Teile der Bibliothek du benutzt. Gut möglich, dass hier ähnliche Mechanismen am Werk sind.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: