Kiedy opracowano program, nie-op:Zmniejszenie rozmiaru kodu EXE rozmiaru GCC?
int main(void)
{
return 0;
}
z różnymi kompilatory:
GCC (podobny wynik do LLVM również): Dał wykonywalny 10 KiB (sporządzoną z
-s
)sekcje:
.CRT
,.bss
,.data
,.idata
,.rdata
,.text
,.tls
Zależy
msvcrt.dll
ikernel32.dll
MSVC 2010: Dał 5.5 KiB wykonywalny (skompilowany z
/MD /Ox
)sekcjach:
.data
,.rdata
,.reloc
,.text
Zależy
msvcr100.dll
ikernel32.dll
mogła być zmniejszona przez scalanie
.rdata
z.text
systemu Windows Driver Kit 7.1: Dał 6.5 KiB wykonywalny (skompilowany z
/MD /Ox
, połączoną zmsvcrt_winxp.obj
aby umożliwić działanie na XP)Sekcje:
.data
,.rdata
,.text
Zależy od
msvcrt.dll
ikernel32.dll
mogło być dalej zredukowana poprzez połączenie
.rdata
z.text
Windows 2003 Development Kit Kierowca: Dał 3.5 Plik wykonywalny KiB
sekcje:
.data
,.rdata
,.text
Zależy
msvcrt.dll
mógł być dodatkowo zredukowana poprzez połączenie
.rdata
z.text
Tiny kompilator C (TCC) otrzymano 1.5 KiB wykonywalne
Sekcje:
.data
,.text
Zależy od
msvcrt.dll
Więc myślę, że pytanie jest prosta:
Czy możliwe jest dalsze zmniejszyć docelowe rozmiary plików GCC lub LLVM tak, że są bliżej do minimum, a jednocześnie łączą się z msvcrt.dll
?
(Edit: Ja oczywiście nie szuka pakerów jak UPX
itp)
Czy możesz wyjaśnić, dlaczego pytasz? Czy często kompilujesz taki malutki program? Czy nie jest ważniejsze, aby kompilator kompilował dobrze realistyczne programy? (większość z nich jest znacznie większa)! –
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
@Ulterior: Opcja '-s' jest prawie taka sama jak' strip'. Inne opcje również nie pomogły. – Mehrdad