Difference between revisions of "Lazarus Faq/it"

From Free Pascal wiki
Jump to navigationJump to search
(New page: {{Lazarus Faq}} == Questioni generiche == ===PErché i file binari generati sono così grandi?=== Sono grandi perché includono una grande quantità di informazioni di debug necessarie p...)
 
Line 3: Line 3:
 
== Questioni generiche ==
 
== Questioni generiche ==
  
===PErché i file binari generati sono così grandi?===
+
===Perché i file binari generati sono così grandi?===
 
Sono grandi perché includono una grande quantità di informazioni di debug necessarie per l'uso di gdb (GNU Debugger). Il compilatore ha un'opzione (-Xs) che toglie le informazioni di debug dagli eseguibili, ma nelle versioni 2.0.2 e precedenti non funzionava a causa di un bug, che è stato corretto a partire dalla versione 2.0.4 e successive del compilatore FreePascal.
 
Sono grandi perché includono una grande quantità di informazioni di debug necessarie per l'uso di gdb (GNU Debugger). Il compilatore ha un'opzione (-Xs) che toglie le informazioni di debug dagli eseguibili, ma nelle versioni 2.0.2 e precedenti non funzionava a causa di un bug, che è stato corretto a partire dalla versione 2.0.4 e successive del compilatore FreePascal.
  
Line 21: Line 21:
 
* Tutta la libreria di runtime del Free Pascal
 
* Tutta la libreria di runtime del Free Pascal
  
Per cui è sì molto grande, ma include praticamente tutto quello che serve a un'applicazione reale che sia un minimo complessa. Gli eseguibili generati da Lazarus sono grandi inizialmente, ma crescono molto poco al crescere della complessità dell'applicazione, grazie alle proprietà del Free Pascal e del modo in cui funzionano i form di Lazarus. Un progetto C++ (ma anche in molti altri linguaggi e tool) inizia con dimensioni dell'exe molto piccole, ma che crescono esponenzialmente quando si aggiungono funzionalità realmente utili e non banali.
+
Per cui è sì molto grande, ma include quasi tutto quello che serve a un'applicazione reale che sia un minimo complessa. Gli eseguibili generati da Lazarus sono grandi inizialmente, ma crescono molto poco al crescere della complessità dell'applicazione, grazie alle proprietà del Free Pascal e del modo in cui funzionano i form di Lazarus. Un progetto C++ (ma anche in molti altri linguaggi e tool) inizia con dimensioni dell'exe molto piccole, ma che crescono esponenzialmente quando si aggiungono funzionalità realmente utili e non banali.
  
 
[[Image:Lazarus_vs_cpp.png]]
 
[[Image:Lazarus_vs_cpp.png]]
  
<!--
+
'''Guida rapida alla riduzione della dimensione degli eseguibili generati da Lazarus/FPC ''' ''(testato con Lazarus 0.9.26)''
  
'''Quick guide to Lazarus/FPC application size reduction''' ''(tested with Lazarus 0.9.26)''
+
* 1. Project|Compiler Options|Code|Smart Linkable (-CX) -> Selezionato
 +
* 2. Project|Compiler Options|Linking|Debugging| Deselezionare tutto tranne
 +
Strip Symbols From Executable (-Xs) -> Selezionato
 +
* 3. Project|Compiler Options|Linking|Link Style|Link Smart (-XX) -> Selezionato
  
* 1. Project|Compiler Options|Code|Smart Linkable (-CX) -> Checked
+
La parte più importante sembra essere la 2. Per una semplice applicazione, la dimensione dell'eseguibile dovrebbe ora essere 1-3 MB invece di 15-20 MB. A questo punto potreste provare anche:
* 2. Project|Compiler Options|Linking|Debugging| Uncheck all except
 
Strip Symbols From Executable (-Xs) -> Checked
 
* 3. Project|Compiler Options|Linking|Link Style|Link Smart (-XX) -> Checked
 
  
The most important items seem to be 2. For a simple application the executable size should now be 1-3 MB instead of 15-20 MB. At this point you can also try: Project|Compiler Options|Code|Optimizations|smaller rather than faster -> Checked (Warning: this might decrease performance)
+
* 4. Project|Compiler Options|Code|Optimizations|smaller rather than faster -> Selezionato (Attenzione: potrebbe penalizzare la velocità di esecuzione)
  
* 4. (Optional) Run UPX <your_executable> to compress your binary by an additional factor of 2-3 (Warning: as indicated above, there are drawbacks to using UPX).
+
* 5. (opzionale) usate UPX <vostro_eseguibile> per comprimere il file binario di un fattore due o tre. (Attenzione: come già detto, ci sono alcuni svantaggi nell'uso di UPX).
  
''' Chart of default sizes for an empty Application with various settings and operating systems'''
+
''' Tabella delle dimensioni di una applicazione vuota con varie impostazioni e sistemi operativi'''
  
Well I ran tests I did on Lazarus 0.9.29 with FPC 2.4 (FPC
+
Ho fatto girare i test che ho fatto su Lazarus 0.9.29 con FPC 2.4 (FPC 2.2.4 sotto Windows). ''Compilatore ottimizzato'' significa usare i consigli dati qui sopra ma ''senza usare UPX''; ''Default Lazarus'' significa usando Lazarus con le impostazioni di default che ha appena installato; ''LCL senza info di debug'' significa dopo aver ricompilato la LCL e la IDE di Lazarus senza le informazioni di debug (-g-).
2.2.4 with Windows). ''Optimized compiler'' mean using the advices above but ''without using UPX''. ''Default Lazarus'' means as installed from package/setup. ''LCL without debug informations'' mean after rebuilding Lazarus IDE and LCL without debug informations (-g-).
 
  
 
<TABLE WIDTH=642 BORDER=0 CELLPADDING=1 CELLSPACING=0>
 
<TABLE WIDTH=642 BORDER=0 CELLPADDING=1 CELLSPACING=0>
Line 47: Line 46:
 
<TD WIDTH=263></TD>
 
<TD WIDTH=263></TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
<TD WIDTH=111>Default Lazarus</TD>
+
<TD WIDTH=111>Lazarus base</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=220>LCL without debug informations</TD>
 
<TD WIDTH=220>LCL without debug informations</TD>
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263><U>Ubuntu 64 bits / Lazarus 64 bits</U></TD>
+
<TD WIDTH=263><U>Ubuntu 64 bit / Lazarus 64 bit</U></TD>
 
<TD COLSPAN=4 WIDTH=372></TD>
 
<TD COLSPAN=4 WIDTH=372></TD>
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263>Default application</TD>
+
<TD WIDTH=263>Applicazione vuota</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=111>13,4&nbsp; Mb</TD>
 
<TD WIDTH=111>13,4&nbsp; Mb</TD>
Line 63: Line 62:
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263>Optimized compiler</TD>
+
<TD WIDTH=263>Compilatore ottimizzato</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=111>4,4 Mb</TD>
 
<TD WIDTH=111>4,4 Mb</TD>
Line 74: Line 73:
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263><U>Ubuntu 32 bits / Lazarus 32 bits</U></TD>
+
<TD WIDTH=263><U>Ubuntu 32 bit / Lazarus 32 bit</U></TD>
 
<TD COLSPAN=4 WIDTH=372></TD>
 
<TD COLSPAN=4 WIDTH=372></TD>
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263>Default application</TD>
+
<TD WIDTH=263>Applicazione vuota</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=111>19,6&nbsp; Mb</TD>
 
<TD WIDTH=111>19,6&nbsp; Mb</TD>
Line 85: Line 84:
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263>Optimized compiler</TD>
+
<TD WIDTH=263>Compilatore ottimizzato</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=111>2,9 Mb</TD>
 
<TD WIDTH=111>2,9 Mb</TD>
Line 96: Line 95:
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263><U>Windows XP 32 bits / Lazarus 32 bits</U></TD>
+
<TD WIDTH=263><U>Windows XP 32 bit / Lazarus 32 bit</U></TD>
 
<TD COLSPAN=4 WIDTH=372></TD>
 
<TD COLSPAN=4 WIDTH=372></TD>
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263>Default application</TD>
+
<TD WIDTH=263>Applicazione vuota</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=111>11,8 Mb</TD>
 
<TD WIDTH=111>11,8 Mb</TD>
Line 107: Line 106:
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263>Optimized compiler</TD>
+
<TD WIDTH=263>Compilatore ottimizzato</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=111>1,62 Mb</TD>
 
<TD WIDTH=111>1,62 Mb</TD>
Line 118: Line 117:
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263><U>Windows Seven 64 bits / Lazarus 64 bits</U></TD>
+
<TD WIDTH=263><U>Windows Seven 64 bit / Lazarus 64 bit</U></TD>
 
<TD COLSPAN=4 WIDTH=372></TD>
 
<TD COLSPAN=4 WIDTH=372></TD>
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263>Default application</TD>
+
<TD WIDTH=263>Applicazione vuota</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=111>12,3&nbsp; Mb</TD>
 
<TD WIDTH=111>12,3&nbsp; Mb</TD>
Line 129: Line 128:
 
</TR>
 
</TR>
 
<TR VALIGN=TOP>
 
<TR VALIGN=TOP>
<TD WIDTH=263>Optimized compiler</TD>
+
<TD WIDTH=263>Compilatore ottimizzato</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=14>&nbsp; &nbsp;</TD>
 
<TD WIDTH=111>2,14 Mb</TD>
 
<TD WIDTH=111>2,14 Mb</TD>
Line 136: Line 135:
 
</TR>
 
</TR>
 
</TABLE>
 
</TABLE>
 +
 +
<!--
  
 
=== 'Fatal: Circular unit reference between a and b' ===
 
=== 'Fatal: Circular unit reference between a and b' ===

Revision as of 05:33, 31 January 2011

العربية (ar) Deutsch (de) English (en) español (es) français (fr) magyar (hu) italiano (it) 日本語 (ja) 한국어 (ko) português (pt) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN) 中文(台灣)‎ (zh_TW)

Questioni generiche

Perché i file binari generati sono così grandi?

Sono grandi perché includono una grande quantità di informazioni di debug necessarie per l'uso di gdb (GNU Debugger). Il compilatore ha un'opzione (-Xs) che toglie le informazioni di debug dagli eseguibili, ma nelle versioni 2.0.2 e precedenti non funzionava a causa di un bug, che è stato corretto a partire dalla versione 2.0.4 e successive del compilatore FreePascal.

Si può usare il programma "strip" per rimuovere i simboli di debug dagli eseguibili; si trova nella directory lazarus\pp\bin\i386-win32\. Basta dare il comando "strip --strip-all <nome e pathname del vostro eseguibile>" dalla linea di comando. Per rendere ancora più piccolo il vostro eseguibile usate UPX, un ottimo exe packer; non causa overhead di memoria perché usa un algoritmo di decompressione in-place, ed ha una velocità di decompressione veramente buona (~10 MB/sec su un Pentium 133).

Per usare upx date il comando "upx <nome e pathname del vostro eseguibile>" dalla linea di comando. Dopo aver usato entrambi questi programmi su un semplice programma GUI creato con Lazarus si ottiene:

  • ~ 700kb su Linux
  • ~ 420kb su Windows

Una discussione più approfondita dei pro e contro dell'uso di UPX si trova nell'articolo Size Matters.

E' inoltre importante notare che anche un semplice hello world creato con Lazarus include già un gran numero di funzioni, fra le quali:

  • librerie di gestione di XML
  • librerie di gestione immagini per file png, xpm, bmp e ico
  • Praticamente tutti i widget della Lazarus Component Library
  • Tutta la libreria di runtime del Free Pascal

Per cui è sì molto grande, ma include quasi tutto quello che serve a un'applicazione reale che sia un minimo complessa. Gli eseguibili generati da Lazarus sono grandi inizialmente, ma crescono molto poco al crescere della complessità dell'applicazione, grazie alle proprietà del Free Pascal e del modo in cui funzionano i form di Lazarus. Un progetto C++ (ma anche in molti altri linguaggi e tool) inizia con dimensioni dell'exe molto piccole, ma che crescono esponenzialmente quando si aggiungono funzionalità realmente utili e non banali.

Lazarus vs cpp.png

Guida rapida alla riduzione della dimensione degli eseguibili generati da Lazarus/FPC (testato con Lazarus 0.9.26)

  • 1. Project|Compiler Options|Code|Smart Linkable (-CX) -> Selezionato
  • 2. Project|Compiler Options|Linking|Debugging| Deselezionare tutto tranne

Strip Symbols From Executable (-Xs) -> Selezionato

  • 3. Project|Compiler Options|Linking|Link Style|Link Smart (-XX) -> Selezionato

La parte più importante sembra essere la 2. Per una semplice applicazione, la dimensione dell'eseguibile dovrebbe ora essere 1-3 MB invece di 15-20 MB. A questo punto potreste provare anche:

  • 4. Project|Compiler Options|Code|Optimizations|smaller rather than faster -> Selezionato (Attenzione: potrebbe penalizzare la velocità di esecuzione)
  • 5. (opzionale) usate UPX <vostro_eseguibile> per comprimere il file binario di un fattore due o tre. (Attenzione: come già detto, ci sono alcuni svantaggi nell'uso di UPX).

Tabella delle dimensioni di una applicazione vuota con varie impostazioni e sistemi operativi

Ho fatto girare i test che ho fatto su Lazarus 0.9.29 con FPC 2.4 (FPC 2.2.4 sotto Windows). Compilatore ottimizzato significa usare i consigli dati qui sopra ma senza usare UPX; Default Lazarus significa usando Lazarus con le impostazioni di default che ha appena installato; LCL senza info di debug significa dopo aver ricompilato la LCL e la IDE di Lazarus senza le informazioni di debug (-g-).

    Lazarus base     LCL without debug informations
Ubuntu 64 bit / Lazarus 64 bit
Applicazione vuota     13,4  Mb     7,5 Mb / 8
Compilatore ottimizzato     4,4 Mb     2,70 Mb (0.29svn FPC2.4 2,5)
   
Ubuntu 32 bit / Lazarus 32 bit
Applicazione vuota     19,6  Mb     5,7 Mb
Compilatore ottimizzato     2,9 Mb     1,6 Mb
   
Windows XP 32 bit / Lazarus 32 bit
Applicazione vuota     11,8 Mb     2,14 Mb
Compilatore ottimizzato     1,62 Mb     1,50 Mb
   
Windows Seven 64 bit / Lazarus 64 bit
Applicazione vuota     12,3  Mb     3,20 Mb
Compilatore ottimizzato     2,14 Mb     2,16 Mb