J
Joon
Hello,
I am programming for Windows, using MinGW (GCC 3.2.3) and I have just read
"Techniques for reducing Executable size"
(http://www.catch22.org.uk/tuts/minexe.asp). I want to write the smallest
program with gcc, and I will use neither command line arguments (argc and
argv) nor memory functions (malloc, ...) (I will take advantage of
HeapAlloc) nor exception handling so that I do need the functions that are
called before main(). As a consequence I just wote
int mainCRTStartup()
{
return 0;
}
which is exactly 2 048 bytes, telling the linker I did not want any standard
or startup library.
I would like to get even smaller executables, by changing the FILEALIGN and
ALIGN of the executable, as explained in catch22's article. They use, for
Visual C++ 6.0 :
//---------------
// Make section alignment really small
#pragma comment(linker, "/FILEALIGN:16")
#pragma comment(linker, "/ALIGN:16")
// Merge sections
#pragma comment(linker, "/MERGE:.rdata=.text")
#pragma comment(linker, "/MERGE:.text=.text")
#pragma comment(linker, "/MERGE:.reloc=.text")
//---------------
How could I "translate" this for the MinGW linker ?
Thanks,
Sam.
I am programming for Windows, using MinGW (GCC 3.2.3) and I have just read
"Techniques for reducing Executable size"
(http://www.catch22.org.uk/tuts/minexe.asp). I want to write the smallest
program with gcc, and I will use neither command line arguments (argc and
argv) nor memory functions (malloc, ...) (I will take advantage of
HeapAlloc) nor exception handling so that I do need the functions that are
called before main(). As a consequence I just wote
int mainCRTStartup()
{
return 0;
}
which is exactly 2 048 bytes, telling the linker I did not want any standard
or startup library.
I would like to get even smaller executables, by changing the FILEALIGN and
ALIGN of the executable, as explained in catch22's article. They use, for
Visual C++ 6.0 :
//---------------
// Make section alignment really small
#pragma comment(linker, "/FILEALIGN:16")
#pragma comment(linker, "/ALIGN:16")
// Merge sections
#pragma comment(linker, "/MERGE:.rdata=.text")
#pragma comment(linker, "/MERGE:.text=.text")
#pragma comment(linker, "/MERGE:.reloc=.text")
//---------------
How could I "translate" this for the MinGW linker ?
Thanks,
Sam.