【问题标题】:Visual C++ 9.0 (2008) Static Lib + Boost Library = Large .lib FileVisual C++ 9.0 (2008) 静态库 + Boost 库 = 大型 .lib 文件
【发布时间】:2023-03-28 14:28:01
【问题描述】:

我有一个 Visual Studio 2008 C++ 项目,它输出一个静态库并使用 Boost 库的某些功能。当我在调试配置中构建项目时,.lib 文件为 7.84 MB。当我在 Release 配置中构建项目时,.lib 文件为 23.5 MB。 !!!!

我包含的唯一 Boost 标头是:

  • boost/function.hpp
  • boost/exception/all.hpp

由于这是一个静态库,我没有指定要包含的任何 Boost 库文件,但不知何故它是一个巨大的输出。当我在测试可执行文件中使用该静态库时,生成的 .exe 文件在 Debug 中只有 746 KB,在 Release 中只有 231 KB。

问题是我必须创建库的“发布”以签入不同的存储库以供其他项目使用。而且我不希望每次更新时都必须添加 30 MB 的文件。如果没有别的,我真的很困惑,为什么 Release 版本是 Debug 版本的 3 倍。

有人对我做错了什么有建议吗?

谢谢, 马特

【问题讨论】:

  • 也许您正在使用一些结构,导致大量 boost 模板被“实例化”?
  • 你确定调试版本链接到静态库,而不是 DLL?
  • @Patrick:我有一个异常文件/类,我使用他们推荐的方式从boost::exception 派生(我在整个项目中都使用它)。我还有一个接受boost::function<double (double x)> 参数的类。
  • @John:不确定你的意思?静态库项目实际上并没有链接到其他 lib 文件吗?我认为这是消耗它的 exe 或 dll 的工作。

标签: c++ visual-c++ boost linker static-libraries


【解决方案1】:

项目 + 属性、C/C++、优化、整个程序优化 = 不。这至少应该使您的发布版本大小不会爆炸。我无法重现调试库的大小,只是标题给了我一个 111KB 的 .lib。

【讨论】:

  • 这使发布版本减少到 5.41 MB。好多了。在这种情况下,将 Whole Program Optimization 的值更改为 No 对速度和性能影响很大吗?
  • 在您尝试使用整体程序优化功能优化程序之前,它没有任何效果。如果您从未听说过它,那么您将不会错过它。如果你这样做了,那么你可以创建一个不同的构建配置。
猜你喜欢
  • 2011-01-06
  • 2023-03-13
  • 1970-01-01
  • 2021-01-05
  • 2014-08-24
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多