【问题标题】:How to reduce simple cpp application size? (compiled with RAD Studio 2010 cpp builder)如何减小简单的 cpp 应用程序大小? (使用 RAD Studio 2010 cpp builder 编译)
【发布时间】:2010-05-16 03:13:10
【问题描述】:

我正在使用 rad studio 2010 cpp builder。我创建了一个新的 SDI 应用程序,添加了一个 TCppWebBrowser 控件和一个简单的按钮,该按钮在点击时触发 TCppWebBrowser 的 .navigate,我编译了它,我得到了一个 1.20mb 的文件,我预计至少小于 700kb。

如何减小编译后的 exe 大小?

我不想使用“使用运行时包构建”,我知道它会变得非常小,但我想在 exe 中获取所有必要的包和依赖项,但也许我得到的比我使用的要多,我尝试取消选中/删除很多我不使用的设计包(在项目/选项/包中),但文件大小没有减少。

另外我在想也许 RAD Studio 附带的 TForm 组件给了我比我需要的更多的东西,这可能会使文件更大,我的意思是我只需要在表单中删除一个 webbrowser 控件和几个按钮,也许我可以用一个最小的表单组件来替换 TForm。

我知道我可以使用像 upx 这样的打包器,但我仍然想在打包之前将大小缩小一半。

任何建议将不胜感激。

【问题讨论】:

  • 为什么?在我简单的戴尔笔记本电脑上,下载该文件需要 0.65 秒,占用我磁盘空间的 0.00004%。字节很便宜。
  • 与您的计算机系统无关。
  • 就目前而言,我认为 Visual Studio 编译器生成最小的二进制文件。

标签: c++ compiler-construction c++builder sdi


【解决方案1】:

this thread有一些建议:

【讨论】:

    【解决方案2】:

    调试版本往往比发布版本大得多。如果您不进行调试构建,您可能会考虑“剥离”您的可执行文件以删除已附加到二进制文件的信息数据的最后痕迹。

    【讨论】:

    • 是的,对不起,我忘了提到我正在做“发布构建”。我将研究“信息数据的最后痕迹”。谢谢
    • 人力资源部。您是否尽可能删除了所有 #include?​​span>
    • 是的,但我一直在 embarcadero 论坛上阅读,似乎 RTTI 参与了如此简单的应用程序如此庞大的原因。我需要继续研究,我想我可能需要用一些新的 RTTI 指令重新编译 vcl 包。
    【解决方案3】:

    如果你真正想要的是一个小的可执行文件,那么你真的不应该使用 VCL 框架。如果需要低文件大小,则应直接使用 Windows API。这将避免框架的开销。无论您使用什么框架,您很可能最终都会有一些开销,除非您使用该库的每个功能。像 VCL 这样的框架的整个想法不是生成小的可执行文件,而是让程序员更轻松、更快速地开发应用程序。

    除了考虑框架更改(或删除)之外,您还应该考虑一些事情。请注意,尽管其中许多技术可能会对编译的可执行文件的性能产生负面影响。选择不使用框架可能会使您处于一种情况,您可能不得不重新发明轮子——可以这么说——使您的代码更容易出错。所以在选择这条路之前权衡后果。

    • 您可以考虑使用像UPX 这样的可执行打包程序,这将减少可执行文件的大小,但会影响性能。

    • 您可以使编译器针对更小的文件大小进行优化,而不是针对更快的可执行文件进行优化。

    • 1234563在此处执行此操作:Techniques for reducing Executable size 该页面上实际上有很多有用的提示,但其中一些已在此处的答案中提到。

    不过,底线似乎是,当您需要极小的可执行文件时,您不应该使用任何较大的框架。 VCL在易用性和可扩展性方面有其巨大的优势,但它并不能节省空间。

    【讨论】:

    • 感谢您提供信息和链接。我决定不使用vcl,我想我要安装旧的visual studio 6并在那里学习编写纯win32的代码。
    • VS6 真的很老,而且相当不合规。我相信您可以获得更现代的 MS 编译器的免费版本。
    【解决方案4】:

    看来您选择的图书馆应该受到责备。如果您的库是应用程序中最大的组件,那么您几乎无能为力 - 最简单的解决方法是使用另一个库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 2023-04-04
      • 2020-08-23
      相关资源
      最近更新 更多