【问题标题】:C++ -static Flag makes executable too bigC++ -static 标志使可执行文件太大
【发布时间】: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


【解决方案1】:

您可以尝试使用 strip 从可执行文件中剥离调试信息以稍微减小大小,但这会使直接调试变得有些困难。

【讨论】:

    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多