问题
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
回答1:
Flags to use:
-s
like you've been doing to strip symbols-lstdc++_s
to specify dynamically linking against thelibstdc++.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.
回答2:
Give strip and UPX a try.
回答3:
Using the -Os flag might help. That optimizes for size.
回答4:
You should be using -O for optimization. Add "-O{level}" to your compiler args and it will optimize for either speed or size. Check the docs for your compiler.
You could also have debugging symbols enabled. Stripping those will also make it smaller.
来源:https://stackoverflow.com/questions/7973274/how-to-reduce-the-size-of-executable-produced-by-mingw-g-compiler