Difference between revisions of "Lazarus Faq/it"
(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?=== |
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 | + | 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)'' | |
− | + | * 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-). | |
− | 2.2.4 | ||
<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> </TD> | <TD WIDTH=14> </TD> | ||
− | <TD WIDTH=111> | + | <TD WIDTH=111>Lazarus base</TD> |
<TD WIDTH=14> </TD> | <TD WIDTH=14> </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 | + | <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> | + | <TD WIDTH=263>Applicazione vuota</TD> |
<TD WIDTH=14> </TD> | <TD WIDTH=14> </TD> | ||
<TD WIDTH=111>13,4 Mb</TD> | <TD WIDTH=111>13,4 Mb</TD> | ||
Line 63: | Line 62: | ||
</TR> | </TR> | ||
<TR VALIGN=TOP> | <TR VALIGN=TOP> | ||
− | <TD WIDTH=263> | + | <TD WIDTH=263>Compilatore ottimizzato</TD> |
<TD WIDTH=14> </TD> | <TD WIDTH=14> </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 | + | <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> | + | <TD WIDTH=263>Applicazione vuota</TD> |
<TD WIDTH=14> </TD> | <TD WIDTH=14> </TD> | ||
<TD WIDTH=111>19,6 Mb</TD> | <TD WIDTH=111>19,6 Mb</TD> | ||
Line 85: | Line 84: | ||
</TR> | </TR> | ||
<TR VALIGN=TOP> | <TR VALIGN=TOP> | ||
− | <TD WIDTH=263> | + | <TD WIDTH=263>Compilatore ottimizzato</TD> |
<TD WIDTH=14> </TD> | <TD WIDTH=14> </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 | + | <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> | + | <TD WIDTH=263>Applicazione vuota</TD> |
<TD WIDTH=14> </TD> | <TD WIDTH=14> </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> | + | <TD WIDTH=263>Compilatore ottimizzato</TD> |
<TD WIDTH=14> </TD> | <TD WIDTH=14> </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 | + | <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> | + | <TD WIDTH=263>Applicazione vuota</TD> |
<TD WIDTH=14> </TD> | <TD WIDTH=14> </TD> | ||
<TD WIDTH=111>12,3 Mb</TD> | <TD WIDTH=111>12,3 Mb</TD> | ||
Line 129: | Line 128: | ||
</TR> | </TR> | ||
<TR VALIGN=TOP> | <TR VALIGN=TOP> | ||
− | <TD WIDTH=263> | + | <TD WIDTH=263>Compilatore ottimizzato</TD> |
<TD WIDTH=14> </TD> | <TD WIDTH=14> </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.
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 |