I have a C++/MFC app on windows - dynamically linked it\'s only 60kb static it\'s > 3Mb.
It is a being distributed to customers by email and so needs to be as small as p
For programs using the CRT, you can use the technique in this video by Per Vognsen on achieving 3.5KB executables. Windows\System32\msvcrt.dll
ships with every Windows since 95, so by linking to that, you needn't package the Visual C++ Redistributable with your app.
The basic process is:
dumpbin
on System32\msvcrt.dll
and pipe it to a fileawk '{print $4}'
) to create a msvcrt.def
filelib
on msvcrt.def
to generate msvcrt.lib
/NODEFAULTLIB
on the link
command line)/GS-
and remove any /RTC
flags)Link against kernel32.lib
and msvcrt.lib
and voilà, your tiny executable has zero dependencies besides the OS.
(n.b.: To optimize for size (/O1
), specify memset
as an intrinsic as detailed here.)