【问题标题】:Why is my C++ executable so big? [duplicate]为什么我的 C++ 可执行文件这么大? [复制]
【发布时间】:2012-06-14 10:03:42
【问题描述】:

可能重复:
GCC C++ “Hello World” program -> .exe is 500kb big when compiled on Windows. How can I reduce its size?

我刚开始阅读一些 C++ 在线教程,第一课是 Hello World 程序。当我将程序编译为可执行文件时,即使它只是一个简单的 Hello World 控制台程序,大小也超过 400kb。应该这么大吗?如果不是,为什么会这样?我做错了吗?

这里是来源:

#include <iostream>
using namespace std;
int main()
{
    cout<<"Hello World";
    cin.get();
}

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 你如何编译你的程序?
  • 您构建的是调试版还是发布版?你用的是什么编译器?什么操作系统?影响可执行文件大小的因素有很多。我的猜测是你有一个调试版本。
  • 与调试/发布无关。只是&lt;iostream&gt; 产生了相当大的一次性成本。随着计划的发展,该成本变得可以忽略不计。
  • 我正在使用与 GCC 捆绑在一起的 Dev-Cpp。我正在运行 Windows 7 企业版。我不太清楚你所说的调试构建是什么意思,我所做的就是点击菜单中的编译和运行。
  • 在我的 GNU/Linux 桌面上使用 GCC 编译它,生成一个 7.1kb 的可执行文件(没有任何优化标志)。

标签: c++ size


【解决方案1】:

静态链接 C 和/或 C++ 运行时可以大大增加大小。此外,编译程序以包含调试信息会增加大小。

【讨论】:

    【解决方案2】:

    这几乎可以肯定是因为您创建了一个静态可执行文件,即可以独立运行且不依赖运行时库的可执行文件。有关如何避免这种情况,请参阅编译器/链接器的文档。

    编辑:

    从您的代码中,动态链接的可执行文件(Linux 上的 gcc 4.3.2)得到 13540 字节,而静态链接的可执行文件则得到 6.7Mb。

    【讨论】:

      【解决方案3】:

      它可能带有调试信息。如果你去掉它(通过在 Visual Studio 中构建发布模式,或者在 Linux 中使用strip 命令),它会小得多。

      【讨论】:

        【解决方案4】:

        不要链接你的应用静态。试着让它动态化。

        【讨论】:

        • 我如何让它动态化?我正在使用 dev-cpp。
        【解决方案5】:

        在调试模式下构建将编译和链接未以任何方式(速度/大小)优化的代码,您最终会得到包含调试版本的系统库的臃肿 exec。

        如果您切换到发布模式,编译器和链接器可以被优化为仅使用它们在最终 exec 中需要的函数并使用它们的发布版本。 这样,如果您选择了优化空间,您最终会“希望”拥有一个较小的 exec。

        【讨论】:

        • 您好,如何切换到发布模式?
        • 如果您使用的是 Visual Studio,在您的 IDE 中,您可以默认选择调试和发布模式,只需选择您想要的模式即可。如果您通过 CLI 进行编译,则 -g 用于调试模式,省略它用于发布。见 gcc:gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html
        猜你喜欢
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 2012-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-17
        • 1970-01-01
        相关资源
        最近更新 更多