gpt4 book ai didi

c++ - 减少发布版本中非常大的静态库的大小

转载 作者:行者123 更新时间:2023-11-30 05:02:54 24 4
gpt4 key购买 nike

我们在 Windows 7/10 和 Visual Studio 2015 下工作,使用 C++ 和 Qt 进行编码(并与少数其他外部库链接)。我们的项目相当大 - 超过 1300 个类,数十万个 LOC。

我们现在需要将项目拆分为一个“核心库项目”(我们的模块测试项目链接到该项目)和一个“main() 项目”(它还链接到 lib 项目以生成可执行文件)。

我遇到的问题是,从“核心库项目”创建的库是巨大的——至少在 Release模式下是这样。我们的应用程序(以其当前的单一项目形式构建时)最终大小约为 40MB。库达到 ~4GB(!),然后由于链接失败而出现问题;目标文件目录中有 ~7GB 的 .obj 。 (在 Debug模式下,情况要温和得多——库和 .obj 文件目录不超过 ~350MB)。对于可能导致这种大小膨胀的任何提示(特别是因为最终的所有测量值微不足道 ~40MB)或如何减少它,我将不胜感激......

更新:我发现目标文件大小膨胀的“罪魁祸首”- Visual Studio 的“完整程序优化”- 准确地说是“链接时间代码生成”(选项/LTCG)。我禁用了 LTCG,目标文件大小从总计 6.7GB 缩小到总计 64MB...

也就是说,我不太希望减少库的大小,因为在库的创建过程中链接器可能还不能确定它可以优化什么(不像在最终可执行文件的创建过程中)。

最佳答案

难怪静态链接的二进制是最短的;未使用的目标文件被删除,目标文件中很可能未使用的代码被链接优化器排除。

我怀疑基于构建模式的过度调节。你玩过 _Debug 宏和预处理器指令吗?项目依赖和链接宏呢? make 文件是否已损坏或未谨慎篡改?

关于c++ - 减少发布版本中非常大的静态库的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49633484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com