Quando ho compilato un programma no-op:Riduzione della dimensione del codice EXE di destinazione GCC?
int main(void)
{
return 0;
}
con vari compilatori:
GCC (risultato simile a LLVM così): diè eseguibile 10-KiB (compilato con
-s
)Sezioni:
.CRT
,.bss
,.data
,.idata
,.rdata
,.text
,.tls
Dipende
msvcrt.dll
ekernel32.dll
MSVC 2010: Ha dato un KiB eseguibile 5.5 (compilato con
/MD /Ox
)Sezioni:
.data
,.rdata
,.reloc
,.text
Dipende
msvcr100.dll
ekernel32.dll
Avrebbe potuto essere ulteriormente ridotto attraverso la fusione
.rdata
con.text
di Windows Driver Kit 7.1: Ha dato un KiB eseguibile 6.5 (compilato con
/MD /Ox
, collegata conmsvcrt_winxp.obj
per consentirne l'esecuzione su XP)Sezioni:
.data
,.rdata
,.text
Dipende da
msvcrt.dll
ekernel32.dll
avrebbe potuto essere ulteriormente ridotto attraverso la fusione
.rdata
con.text
di Windows Driver Development Kit 2003: Ha dato un 3,5 Eseguibile KiB
Sezioni:
.data
,.rdata
,.text
Dipende da
msvcrt.dll
avrebbe potuto essere ulteriormente ridotto fondendo
.rdata
con.text
Piccolo compilatore C (TCC): dichiarino la 1.5 KiB eseguibili
Sezioni:
.data
,.text
Dipende da
msvcrt.dll
Quindi credo che la questione è semplice:
E 'possibile ulteriormente ridurre le dimensioni eseguibili di destinazione di GCC o LLVM in modo che siano più vicini al minimo possibile, pur continuando a collegarsi a msvcrt.dll
?
(Edit: io non sono, ovviamente, alla ricerca di confezionatori come UPX
, etc.)
Puoi spiegare perché stai chiedendo? Compilate spesso un programma così piccolo? Non è più importante per un compilatore compilare programmi ben realistici ?? (molti di questi sono molto più grandi)! –
http://stackoverflow.com/questions/1413171/what-is-strip-gcc-application-used-for, http://embeddedfreak.wordpress.com/2009/02/10/removing-unused-functionsdead-codes -with-gccgnu-ld/ – Ulterior
@Ulteriore: L'opzione '-s' è praticamente uguale a' strip'. Anche le altre opzioni non hanno aiutato. – Mehrdad