I have a trivial "Hello world" C++ program that is compiled to 500kB executable by MinGW g++ compiler under Win XP. Some say that is caused by iostream library and static link of libstdc++.dll.
Using -s linker option helped a bit (reducing 50% size), but I would by satisfied only by <10kB executable. Is there any way how to achieve this using MinGW compiler? Portability is not a big concern for me.
Is it possible to copy libstdc++.dll with the executable using dynamic linking? If so, how to achieve this?
Solved: I was using MinGW 3.4. Now I updated to latest MinGW 4.6 and the size was decreased by 90% to 50kB, with -s option even to 9kB, which is fully sufficient. Anyway - thanks everyone for help. Here you go my results
C++ Hello World program using iostream
MinGW | no options | -s option
------------------------------
3.4 | 500kB | 286 kB
4.6 | 50kB | 9 kB
Flags to use:
-s
like you've been doing to strip symbols-lstdc++_s
to specify dynamically linking against the libstdc++.dll
-Os
to optimize the binary for size.By default mingw static links to libstdc++.a
on Windows.
Note that the lstdc++_s
flag is only in MinGW with GCC > 4.4, I believe.