【发布时间】:2016-05-08 19:55:43
【问题描述】:
我在 windows 环境下使用 Mingw 编译器。当我使用带有以下标志的 iostream 编译 hello world 程序时:g++ hello.cpp -static -s 输出为 967 kb。当我使用g++ hello.cpp -s 时,输出为 16 kb,但它在其他计算机上给出了 libgcc_s_dw2-1.dll 丢失错误。如何以可接受的文件大小构建它?
【问题讨论】:
-
您可能会发现实际库
libgcc_s_dw2-1.dll的大小将比您的两个二进制文件大得多。因此,将可执行文件与 mingw 共享库一起分发实际上会增加总大小。除非您在特定系统上使用共享库有大量 mingw。另外为什么967kb不可接受?小于1mb???用今天的硬件肯定是微不足道的存储量吗?? -
从 GCC 的 documentation 中,
-static关键字阻止与共享库的链接。这意味着库将与您的程序静态链接(库成为您程序的一部分),从而导致大小增加。 -
@silvergasp 967KB 可执行文件是不可接受的,因为核心 Windows DLL 已经实现了 printf 版本。所以任何大于 30KB 的东西都是不可接受的。当然 2-4KB 也可以。在 code/data/relloc 部分有一些填充,所以你不能小于 1KB。现在,我们正在讨论合理的尺寸。
标签: c++ file static linker size