Cuando compilado un programa de no-op:¿Reduciendo el tamaño del código EXE objetivo GCC?
int main(void)
{
return 0;
}
con varios compiladores:
CCG (resultado similar al LLVM así): dio un ejecutable 10-KiB (compilado con
-s
)Secciones:
.CRT
,.bss
,.data
,.idata
,.rdata
,.text
,.tls
Depende de
msvcrt.dll
ykernel32.dll
MSVC 2010: dio un KiB ejecutable 5,5 (compilado con
/MD /Ox
)Secciones:
.data
,.rdata
,.reloc
,.text
Depende de
msvcr100.dll
ykernel32.dll
podría haber sido reducido aún más mediante la fusión de
.rdata
con.text
de Windows Driver Kit 7.1: dio un KiB ejecutable 6,5 (compilado con
/MD /Ox
, vinculado conmsvcrt_winxp.obj
para permitir que se ejecute en XP)Secciones:
.data
,.rdata
,.text
Depende de
msvcrt.dll
ykernel32.dll
podría haberse reducido aún más mediante la fusión de
.rdata
con.text
Kit de desarrollo de controladores de Windows 2003: Dio un 3,5 KiB ejecutable
Secciones:
.data
,.rdata
,.text
Depende de
msvcrt.dll
podría haberse reducido aún más mediante la fusión de
.rdata
con.text
Tiny C Compiler (TCC): dio una 1.5 KiB ejecutables
Secciones:
.data
,.text
Depende de
msvcrt.dll
así que supongo que la pregunta es simple:
¿Es posible aún reducir los tamaños de ejecutables de destino de GCC o LLVM para que estén más cerca del mínimo posible, mientras se enlaza al msvcrt.dll
?
(Edit: Yo, obviamente, no estoy buscando empacadores como UPX
, etc.)
¿Podría explicar por qué está preguntando? ¿Compila a menudo un programa tan pequeño? ¿No es más importante para un compilador compilar programas realistas? (¡la mayoría de ellos son mucho más grandes)! –
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: la opción '-s' es más o menos lo mismo que' strip'. Las otras opciones tampoco ayudaron. – Mehrdad