如何减小MinGW g ++编译器生成的可执行文件的大小?

Jan*_*roň 17 c++ optimization executable mingw

我有一个简单的"Hello world"C++程序,在Win XP下由MinGW g ++编译器编译为500kB可执行文件.有人说这是由libstdc ++.dlliostream库和静态链接引起的.

使用-s链接器选项有点帮助(减小50%的大小),但我只满足于<10kB可执行文件.有没有办法如何使用MinGW编译器实现这一目标?便携性对我来说不是一个大问题.

是否可以使用动态链接将libstdc ++.dll与可执行文件一起复制?如果是这样,如何实现这一目标?


解决了:我使用的是MinGW 3.4.现在我更新到最新的MinGW 4.6,尺寸减少了90%到50kB,-s选项甚至减少到9kB,这已经足够了.无论如何 - 感谢大家的帮助.在这里你得到我的结果

使用iostream的C++ Hello World程序

MinGW | no options | -s option
------------------------------
3.4   | 500kB      | 286 kB
4.6   | 50kB       |   9 kB
Run Code Online (Sandbox Code Playgroud)

wkl*_*wkl 12

要使用的标志:

  • -s 就像你一直在做剥离符号
  • -lstdc++_s 指定动态链接 libstdc++.dll
  • -Os 优化二进制的大小.

默认情况下,mingw静态链接到libstdc++.aWindows.

请注意,该lstdc++_s标志仅在MinGW中,GCC> 4.4,我相信.

  • @Jan - 查看 mingw 的发行说明,他们在 4.5.x 中切换到动态链接 libstdc++,因此这应该是 4.6 中的默认设置,我猜他们删除了该标志将使用的库。不确定您是否仍在静态链接 libstdc++,但您可以在二进制文件上运行 DependencyWalker 或 ldd 来查看是否属实。 (2认同)

gen*_*ult 5

给尝试stripUPX一试.