[Gelöst] Dateigröße von EXE Datei verringern

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

[Gelöst] Dateigröße von EXE Datei verringern

Beitrag von OLLI_S »

Liebe Lazarus Community,

ich habe in Lazarus x64 unter Windows 10 mein erstes (kleines) Projekt erstellt und es kompiliert.
Das Problem ist die Dateigröße des Kompilats, sie ist 20 MB (für einen Dialog mit einem Memo, einem Edit-Feld, einen Button und wenigen Zeilen Code in einer Procedure).

Ich habe dazu folgende Anleitung gelesen:
/viewtopic.php?f=51&t=1878
Bemerkung am Rande: die Anleitung sollte mal überarbeitet werden, hier fehlen die Screenshots.

Obwohl ich meines Wissens nach alles umgestellt habe, ist die Dateigröße immer noch 20 MB.

Daher meine Fragen:
  1. Gibt es eine Möglichkeit die Projekt-Einstellungen für Compiler und Linker wieder auf den Standard zurück zu setzen?
  2. Gibt es in Lazarus nicht einen einfachen Schalter, mit dem man zwischen Debug und Release umschalten kann (so dass man nicht jedes mal mehrere Einstellungen ändern muss)?

Danke für Eure Hilfe!

Gruß

OLLI
Zuletzt geändert von OLLI_S am So 1. Jul 2018, 19:42, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Dateigröße von EXE Datei verringern

Beitrag von wp_xyz »

Den genannten Artikel habe ich nur überflogen. Er hat 10 Jahre auf dem Buckel und dürfte in den Details nicht mehr aktuell sein.

Die Dateigröße rührt davon her, dass Lazarus die vom Debugger benötigten Information standardmäßig mit in die Exe einbindet. Es gibt zwei Möglichkeiten, das zu verhindern (Beschreibung für Laz 1.8.4 - die kann sich von Version zu Version ändern, bleibt aber sinngemäß richtig):

  • Debugger komplett ausschalten: Menü "Projekt" > "Projekteinstellungen" > "Debuggen" - das Häkchen vor "Debugger-Informationen für GDB erzeugen" entfernen.
  • Natürlich kann man dann den Debugger nicht mehr benutzen. Daher ist es sinnvoller, die Debugger-Informationen in eine Datei auszulagern: auf derselben Seite in den Projekteinstellungen das Häkchen vor "Externe Datei mit gdb-Debugsymbolen nutzen" setzen (natürlich muss dann "Debugger-Informationen für GDB erzeugen" wieder eingeschaltet sein).
Mit jeder der beiden Maßnahmen nimmt die Dateigröße eines wie von dir beschriebenen Projekts von etwa 16MB auf 2 MB ab.

Lass die Finger vom Smart-Linking, das kann die Arbeit des Debuggers erschweren (und der ist eh ne Nummer für sich).
Lass die Finger auch von UPX, dein Programm ist damit für den Virenscanner ein "Gefährder".

Du kannst auch mit den "Build-Modes" arbeiten. Die Idee ist hier: während du an dem Programm arbeitest, nimmst du den "Debug"-Modus mit vielen Prüf-Einstellungen, für das fertige Programm schaltest du auf den "Release"-Modus. Auf der Seite "Compilereinstellungen" der Projekteinstellungen ist oben die Checkbox "Erstellmodi", auf den Button "..." klicken und dann auf "Create build and release modes". Alle Änderungen, die du auf den Seiten der "Compilereinstellungen" machst, werden dann dem aktiven Erstell-Modus zugeordnet. Um schnell zwischen den einzelnen Modi umzuschalten, gibt es den dritten Schalter in der 2.Toolbarzeile (blaues Zahnrad mit Schraubschlüssel).

Ein Hinweis noch: Der "Debug"-Modus aktiviert standardmäßig die Speicherleckprüfung mit HeapTrace, was zumindest bei Windows nervt, weil beim Programmende jedesmal ein Fenster über die gefundenen oder nicht gefundenen Lecks erscheint. Daher mache ich mir in dem Erstell-Modi-Dialog einen eigenen Modus "Debug ohne HeapTrace": Die Zeile "Debug" anwählen, "+" klicken, den neuen Modus anwählen und entsprechend umbenennen. Wenn man dann, wenn der neue Modus aktiv ist, auf der Seite "Compilereinstellungen" > "Debuggen" das Häkchen vor "Heaptrc-Unit verwenden" entfernt, bleibt die HeapTrace-Meldung bei diesem Erstellmodus weg.
Zuletzt geändert von wp_xyz am Mi 27. Jun 2018, 23:34, insgesamt 1-mal geändert.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Dateigröße von EXE Datei verringern

Beitrag von Mathias »

Das Problem ist die Dateigröße des Kompilats, sie ist 20 MB (für einen Dialog mit einem Memo, einem Edit-Feld, einen Button und wenigen Zeilen Code in einer Procedure).

Die grösste Ersparnis, ist wie oben beschrieben, den Debugger auszuschalten.
Unter Menü "Projekt" --> Projekteinstellungen --> Kompilieren und Linken" kann man auch noch ein wenig optimieren.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Dateigröße von EXE Datei verringern

Beitrag von Warf »

Das geht ganz einfach. Du gehst auf Projekteinstellungen -> Compilereinstellungen. Dort ist oben eine Checkbox Erstellmodi, die muss aktiviert sein. Dann klickst du oben auf den Button '...' damit sich das Erstellmodi fenster öffnet. Dort ist oben ein Button 'Create Debug and Release modes', da einfach draufklicken. Dies erstellt dir einen Debug modus mit den relevantesten Debug features (z.B. Heaptrc) und einen Release modus mit den entsprechenden Optimierungen. Jetzt mit dem '-' Button den Default eintrag löschen, da du den nicht mehr brauchst, und mit dem 'Ok' Button den Dialog schließen.
Dann wählst das Untermenü Pfade aus und wählst oben in der Combobox den ersten eintrag Debug aus. Unter 'Ziel-Dateiname (-o)' schreibst du dann bin/$(TargetCPU)-$(TargetOS)/Debug/Programmname und stellst sicher das die Checkbox 'Konventionen anwenden' darunter ausgewählt ist.
Dann wählst du Release in der Combobox ganz oben aus und machst das selbe wie voher nur ersetzt Debug durch Release im Pfad. Dann wählst du wieder Debug aus (damit das aktiv gesetzt wird, zum entwickeln willst du ja debuggen können) und Schließt die Projekteinstellungen mit 'Ok'.

Jetzt kannst du zum Entwickeln Lazarus wie gewohnt verwenden, wenn du das Programm veröffentlichen willst einfach über Menü Start->Mehrere Modi kompilieren, sicherstellen das Release ausgewählt ist, und Ok Klicken. Dann befindet sich die Release datei in deinem Projektordner unter bin/.../Release.

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Dateigröße von EXE Datei verringern

Beitrag von OLLI_S »

Hallo Warf,

super, das ist genau das, was ich gesucht habe: dass das Debuggen aus Lazarus heraus noch funktioniert und dass ich trotzdem eine kleine Release-Exe habe.
Werde ich bei Gelegenheit einmal ausprobieren.

Eine Frage habe ich aber noch:
Ich habe aufgrund des 10 Jahre alten Artikels die Kompiler- und Linker-Einstellungen geändert.
Kann ich die wieder auf Default zurück setzen?
Oder muss ich dazu ein neues Projekt anlegen und die *.pas und die *.lfm Dateien da rein kopieren?

Gruß

OLLI

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Dateigröße von EXE Datei verringern

Beitrag von six1 »

Nachdem du im "Release" Mode compiliert hast, kannst du noch UPX anwenden.
https://upx.github.io/

Bei einem 14MB EXE File eines Projektes von mir, ergibt das ~ 3MB
Gruß, Michael

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Dateigröße von EXE Datei verringern

Beitrag von wp_xyz »

OLLI_S hat geschrieben:Ich habe aufgrund des 10 Jahre alten Artikels die Kompiler- und Linker-Einstellungen geändert.
Kann ich die wieder auf Default zurück setzen?

Ich glaube, das geht nicht. Aber dur kannst doch eine zweite Instanz von Lazarus mit einem leeren Projekt öffnen und die unter Compilereinstellungen eingetragenen Werte vergleichen und ggfs korrigieren; ich denke, das geht schneller und ist weniger fehleranfällig als das Projekt neu anzulegen und alle Abhängigkeiten neu einzutragen.

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Dateigröße von EXE Datei verringern

Beitrag von OLLI_S »

Warf hat geschrieben:Das geht ganz einfach. Du gehst auf Projekteinstellungen -> Compilereinstellungen. Dort ist oben eine Checkbox Erstellmodi, die muss aktiviert sein.


Hallo Warf,

ich bin erst heute dazu gekommen das auszuprobieren.
Das ganze funktioniert insoweit, dass jetzt zwei verschiedene EXE angelegt werden und im Debug-Verzeichnis eine EXE und eine Programmname.dbg

Aber wenn ich die Debug-Version starte bekomme ich beim Beenden meiner Anwendung eine Fehlermeldung.
Titel der Meldung "Error", die Meldung beginnt mit "Heap Dump by heaptrc unit..." (und dann kommen eine ganze Menge Speicher-Informationen).
Diese Meldung erscheint immer beim Beenden der Debug Version.
Meine Anwendung ist ein neues Projekt, in das ich im Formular nur einen Button (aber keine einzige Zeile Code und auch kein Event beim Button Click hinzugefügt habe.

Wie bekomme ich diese Meldung wieder weg?
Danke!

Gruß

OLLI

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Dateigröße von EXE Datei verringern

Beitrag von m.fuchs »

OLLI_S hat geschrieben:Wie bekomme ich diese Meldung wieder weg?

Schau einmal sechs Beiträge weiter höher. Da ist Problem und Lösung beschrieben.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

OLLI_S
Beiträge: 65
Registriert: Di 17. Jan 2012, 20:55

Re: Dateigröße von EXE Datei verringern

Beitrag von OLLI_S »

Super, das Problem wurde gelöst

Antworten