Kurzanleitung: Lazarus-Binärdateien kleiner machen

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Kurzanleitung: Lazarus-Binärdateien kleiner machen

Beitrag von Euklid »

Kategorie: Tipps und Tricks
Typ:

Artikel Name: Kurzanleitung: Lazarus-Binärdateien kleiner machen
Autor: Euklid
Beschreibung: Kurzanleitung: Lazarus-Binärdateien kleiner machen


In dieser Anleitung wird die häufig gestellte Frage beantwortet, wie man die Größe der von Lazarus erstellten Binärdateien ohne großen Aufwandt verkleinern kann.

Überblick

Dem Programmierer stehen drei Verfahren zur Verfügung, mit denen die Größe der Binärdateien erheblich verringert werden können:

I. Entfernen von Debugger-Symbolen aus der ausführbaren Datei

II. Smartlinking - Es werden nur Bibliotheken eingehängt, die auch wirklich benötigt werden

III. UPX - Ein Kompressionsverfahren für Binärdateien

Die Effizenz dieser drei Methoden wird im folgenden Diagramm veranschaulicht: *)

Bild

Der oberste Balken entspricht der Größe der Binärdatei, ohne dass eines der Verfahren angewendet wurde. Der zweite Balken gibt die relative Dateigröße in Prozent an, wenn das Verfahren I (Debuggersymbole entfernen) angewandt wurde. Der dritte Balken stellt die Dateigröße nach Anwendung der Verfahren I und II, der vierte Balken nach Anwendung von I, II und III dar.

Wie man sieht, haben die Verfahren einen großen Einfluss auf die Dateigröße. Im Folgenden wird gezeigt, wie man sie anwendet:


I. Entfernen von Debugger-Symbolen
Standardmäßig beinhalten die von Lazarus erstellten Programme Debuggersymbole, welche das Debuggen mit dem GNU Debugger ermöglichen. Diese nehmen natürlich viel Platz ein - daher lohnen sich die folgenden Schritte:

Lazarus sollte gestartet und das entsprechende Projekt geöffnet sein.

1. Folgendes Menü öffnen:
Projekt --> Compilereinstellungen --> Linken


Bild

2. Nun, wie in obiger Abbildung gezeigt,
a) "Zeilennummern in Laufzeit-Backtraces anzeigen" deaktivieren
b) "Debuggersymbole aus der ausführbaren Datei entfernen" aktivieren

3. Das Projekt neu kompilieren.

Hinweis: Die Debuggersymbole sowie die Zeilennummern werden für das Debuggen benötigt! D.h. wenn Sie Ihr Projekt weiterentwickeln ist es sinnvoll, obige Einstellungen vorübergehend wieder rückgängig zu machen.

II. Smart-Linking
Durch Smart-Linking wird sichergestellt, dass nur diejenigen Bibliotheken in die Binärdatei eingefügt werden, die das Programm tatsächlich auch benötigt. Smart-Linking kann durch die folgenden Schritte eingestellt werden:

Lazarus sollte gestartet und das entsprechende Projekt geöffnet sein.

1. Folgendes Menü öffnen:
Projekt --> Compilereinstellungen --> Linken

(siehe Abbildung oben)

2. Smart Linken in der Groupbox "Linker-Stil" aktivieren:
Bild

3.Nun in den Reiter "Quelltext" wechseln und in der Groupbox "Unit-Stil" die Checkbox "Smart-Linkbar" aktivieren:
Bild

4.Das Programm neu kompilieren.

III. UPX
UPX ist ein Programm, das die Binärdatei komprimiert und sich selbst vor die eigentliche ausführbare Datei spannt. Wird das UPX-komprimierte Programm gestartet, wird zunächst UPX gestartet, welches die eigentliche Binärdatei in den Arbeitsspeicher entpackt und dort startet. Sie können das UPX unter der folgenden Adresse downloaden

http://upx.sourceforge.net/

und erreichen damit die besten Ergebnisse durch die folgende Anleitung:

1. Wechseln Sie in der Konsole in das Verzeichnis, in welchem Ihr Programm liegt.

2. Geben Sie nun ein:
upx -9 Dateiname

Ihr Programm wird nun komprimiert.

Wichtiger Hinweis: UPX verringert zwar die Dateigröße Ihrer Binärdatei - im Arbeitsspeicher benötigt Ihr Programm mit UPX aber tendenziell mehr Platz als ohne UPX. Wir empfehlen daher UPX nur dann, wenn das Erreichen einer möglichst geringen Dateigröße zum Überleben notwendig ist.

Sollten Fragen auftauchen, können sie im Forum gestellt werden.

Viele Grüße, Euklid


*) Die im Diagramm dargestellten Werte können von Programm zu Programm geringfügig abweichen.
Zuletzt geändert von monta am Do 11. Nov 2010, 00:35, insgesamt 1-mal geändert.
Grund: Fix Bild-URL

slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

Beitrag von slai »

Die Windows exe files kriegt man dann noch kleiner mit upx.

http://upx.sourceforge.net/
Windows 7, Lazarus 0.9.28.2 fpc 2.2.4, Firebird 2.1, Zeoslib 6.6.6-stable

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Womit man sich aber nur selbst verarscht, denn dei Datei wird im Speicehr ja wieder entpackt und ich glaube kaum das jemand weniger Festplattenplatz als Speicher hat.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Habe gerade gesehen, dass Smartlinking einen erheblichen Einfluss auf die Größe der Binärdateien hat. Werde die Kurzanleitung daher heute Abend um die Punkte
* Smartlinking
* UPX
erweitern.

UPX sehe ich ähnlich kritisch wie Christian. Nützlich kann es aber für die Weitergabe von Programmen sein, z.B. wenn Anwender nur über eine Modemverbindung verfügen oder ihren Computer nur über Disketten füttern. (Wer auch immer die alte Technik verwendet)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Dann kann man doch die Anwendung einfach Packen mit ZIP und gut ist.... dann wird das Starten auch nicht verözgert weil ja beim Starten das Programm erst entpackt werden muss.

Ich habe mit UPX schon böse überraschungen erlebt, als ich es eine weile unter Windows in verbindung mit Delphi Programmen eingesetzt hatte.

Z.B. Bei einfachen 2D Spiele die ich erstellt hatte, lief die MIDI wiedergabe nicht mehr und solche sachen halt. Allerdings konnte ich diesen Fehler meine ich auhc eindemen in dem ich die Stufe der Kompression eingestellt habe. also nicht ganz so hoch.
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

soweit ich mich erinnern kann, werden aber teilweise UPX-Exen, die ansonsten völlig unbedenklich sind, was den Inhalt angeht, von manchen Schutzprogrammen unter Windows geblockt.
Und gerade das dürfte schon genug abschrecken.
Johannes

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

kann mir eig nicht vorstellen das das was mit upx zu tun hatte.

Doch in diesen Fall schon. Das habe ich beweisen, weil es ohne UPX ging und danach nicht mehr
MFG
Michael Springwald

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Vielleicht würde es sich doch lohnen, die genauen Einstellungen anzugeben, die für das Diagramm verwendet wurden. Dann könnte man mit diesen Daten auch mal andere Kombinationen aus OS, FPC und Lazarus testen. Ich denke doch, daß wir hier im Forum ein recht breites Spektrum abdecken können.

knight

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

knight hat geschrieben:Vielleicht würde es sich doch lohnen, die genauen Einstellungen anzugeben, die für das Diagramm verwendet wurden.


Welche würden dich denn interessieren? Für das Diagramm habe ich Promathika unter Variation der im Tipp gegebenen Einstellungen kompiliert.
Promathika verwendet gtk2, habe ohne Codeoptimierung kompiliert.

Viele Grüße, Euklid

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Kurzanleitung: Lazarus-Binärdateien kleiner machen

Beitrag von marcov »


derSandmann

Re: Kurzanleitung: Lazarus-Binärdateien kleiner machen

Beitrag von derSandmann »

Hallo,

seit heute bin ich stolzer Besitzer von Lazarus. Nach der Installation unter Win98 (problemlos) hab ich dann erst mal eine (leere) unit1.pas compiliert. Ergebnis: 12 MB der ausführbaren Datei :|

Nach den oben genannten Empfehlungen:
Step1 - 1,5 MB
Step2 - 1,5 MB

also über den Daumen ca. 10%.

Mache ich das Selbe unter Delphi:
Delphi7 - 350 kB
Delphi2 - 150 kB

Selbst bei Delphi ist mir das für eine 'leere' exe-Datei noch zu groß. Eigentlich hatte ich gehofft, dass das Programm Lazarus in irgend einer Form besser als Delphi wäre... scheint nicht so zu sein. Was in der Hinsicht wirklich gut ist, ist C++ Builder. Hier kommt eine leere Windows-Applikation auf 12 kB. Da fehlt Lazarus immernoch der Faktor 100 :mrgreen:

Vllcht weiß ja noch jemand eine gute Option?

Gruß Manfred

//Sorry, falsche Einstellung und somit Freigabe vergessen. monta

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Kurzanleitung: Lazarus-Binärdateien kleiner machen

Beitrag von marcov »

derSandmann hat geschrieben:Hallo,

seit heute bin ich stolzer Besitzer von Lazarus. Nach der Installation unter Win98 (problemlos) hab ich dann erst mal eine (leere) unit1.pas compiliert. Ergebnis: 12 MB der ausführbaren Datei :|

Nach den oben genannten Empfehlungen:
Step1 - 1,5 MB
Step2 - 1,5 MB

also über den Daumen ca. 10%.

Mache ich das Selbe unter Delphi:
Delphi7 - 350 kB
Delphi2 - 150 kB


Den Preis fuer Portabilitaet.

Selbst bei Delphi ist mir das für eine 'leere' exe-Datei noch zu groß. Eigentlich hatte ich gehofft, dass das Programm Lazarus in irgend einer Form besser als Delphi wäre... scheint nicht so zu sein. Was in der Hinsicht wirklich gut ist, ist C++ Builder. Hier kommt eine leere Windows-Applikation auf 12 kB. Da fehlt Lazarus immernoch der Faktor 100 :mrgreen:


Wirklich? Ich wuerde denken das ein C++ Builder VCL app gleich an Delphi (onder sogar grosser) werde. Ich denke du hast da etwas falsch gemacht (winapi und nicht VCL basiert) oder so.

1. FPC ratet UPX ab.
2. den billigsten USB stick kan 1000 solchen programme speichern.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Kurzanleitung: Lazarus-Binärdateien kleiner machen

Beitrag von Euklid »

marcov hat geschrieben:2. den billigsten USB stick kan 1000 solchen programme speichern.


Da stimme ich zu. Die Größe von ausführbaren Dateien verliert in den Zeiten immer größer werdender Speichermedien und immer schneller werdender Internetverbindungen an Bedeutung.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Kurzanleitung: Lazarus-Binärdateien kleiner machen

Beitrag von pluto »

Es sei denn man möchte eine Anwendung warum auch immer per E-Mail versenden oder ins Internet hochladen. Dann spielt die Größe der Anwendung wieder eine große rolle oder man arbeitet auf Systemen die nur über wenig Festplatten speicher verfügen. Ob es sowas noch gibt weiß ich nicht, aber ich könnte mir vorstellen das z.b. bei Java Fähigen Handy eine rolle spiele könnte. Wobei ich weiß im Moment gar nicht wie groß der Speicher im Handy ist. Aber bestimmt keine 10 GB.

Außerdem: Warum soll man mit der den Speicherplatz verschwenderisch umgehen ?
Stellt euch mal vor alle Ausführbaren Anwendungen die bei einem Linux System dabei sind würden im Schnitt 15 MB groß sein, wobei ich nur eine Datei meine, alle extra Daten kommen noch hinzu. Dann müssten wir warscheinlich eine 1 TB(oder mehr) Große Festplatte haben.

Ich finde es immer unangebracht zu sagen speicher Platzt haben wir genug. Wenn das alle so sehen würden, hätten wir um beim Beispiel Linux zu bleiben bald ein großes Problem. oder sehe ich das jetzt Falsch ? Ich meine es allgemein !

Benutzeravatar
Garfield
Beiträge: 172
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Kurzanleitung: Lazarus-Binärdateien kleiner machen

Beitrag von Garfield »

Euklid hat geschrieben:Da stimme ich zu. Die Größe von ausführbaren Dateien verliert in den Zeiten immer größer werdender Speichermedien und immer schneller werdender Internetverbindungen an Bedeutung.

Das denke ich nicht. Es gibt immer noch

  • nicht überall schnelle Anschlüsse,
  • Tarife, bei welchen nach Volumen abgerechnet wird,
  • Rechner, welche nicht auf dem neuesten Stand sind,
  • Anwender, welche große Dateien/Pakete verabscheuen,
  • Foren, in welchen die Größe der Anhänge stark begrenzt ist,
  • eMail-Programme, die mit größeren Dateien nicht klar kommen,
  • ...

Ich habe Lazarus in den letzten Jahren bereits zweimal wieder deinstalliert, weil mir die Compilate im Verhältnis zu Delphi zu groß waren.

Gesperrt