【发布时间】:2011-11-01 21:40:38
【问题描述】:
我有一个简单的“Hello world”C++ 程序,它在 Win XP 下由 MinGW g++ 编译器编译为 500kB 可执行文件。 有人说这是由 iostream 库和 libstdc++.dll 的静态链接引起的。
使用 -s 链接器选项有点帮助(减少 50% 的大小),但我只对
是否可以使用动态链接将 libstdc++.dll 与可执行文件一起复制?如果可以,如何实现?
已解决:我使用的是 MinGW 3.4。现在我更新到最新的 MinGW 4.6,大小减少了 90% 到 50kB,-s 选项甚至到了 9kB,这完全足够了。无论如何-感谢大家的帮助。给你我的结果
C++ Hello World 程序使用 iostream
MinGW | no options | -s option
------------------------------
3.4 | 500kB | 286 kB
4.6 | 50kB | 9 kB
【问题讨论】:
-
使用
-shared-libstdc++编译并动态链接 libstdc++.dll,使用-Os优化二进制文件的大小。 -
虽然它不像 C++,你可以试试
printf()。我不确定它与 iostream 库共享多少相同的依赖项。所以它可能会也可能不会变小。 -
@birryree:
g++: error: unrecognized option '-shared-libstdc++'使用 MinGW 4.6 -
@Jan - 是的,我认为在 GCC 4.6 中,您生成的二进制文件符合共享 libstdc++ 预期的正常大小 - 在具有 GCC 4.6 的 Linux 上,一个简单的“hello world”应用程序为 8 KB我。 MinGW 的 GCC 3.4 生成的大小是如此之大,因为还没有共享 libstdc++ 的概念。
-
在标准库动态链接的MinGW更高版本下,可以通过
-static-libgcc(C)或-static-libstdc++(C++)选项强制标准库的静态链接。
标签: c++ optimization mingw executable