我们正在Windows 7/10和Visual Studio 2015下工作,使用C ++和Qt进行编码(并与少数其他外部库进行链接)。我们的项目相当大 - 超过1300个班级,成千上万的LOC。
我们现在需要将项目拆分为“核心库项目”(我们的模块测试项目链接到该项目)和“main()项目”(它还与lib项目链接以生成可执行文件)。
我遇到的问题是,从“核心库项目”创建的库是巨大的 - 至少在发布模式下。我们的应用程序(当它以当前的单项目形式构建时)最终大小约为40MB。库达到约4GB(!)然后出现问题,因为链接失败;目标文件目录中有大约7GB的.obj。 (在调试模式下情况远远不够 - 库和.obj文件目录不超过~350MB)。我很感激任何可能导致这种尺寸膨胀的提示(特别是因为最终的所有指标都只有40MB左右)或者如何缩减它......
更新:我找到了膨胀对象文件大小的“罪魁祸首” - 确切地说,Visual Studio的“完整程序优化” - “链接时间代码生成”(选项/ LTCG)。我禁用了LTCG,目标文件大小从总共6.7GB减少到总共64MB ......
也就是说,我对减小库大小的希望较小,因为在创建库期间链接器可能尚未确定它可以优化的内容(与创建最终可执行文件时不同)。
答案 0 :(得分:1)
难怪静态链接的二进制文件是最短的;删除了未使用的目标文件,并且链接优化器排除了目标文件中很可能未使用的代码。
我怀疑基于构建模式的过度调节。你玩过_Debug宏和预处理器指令吗? 项目依赖关系和链接宏怎么样? make文件是否已损坏或未经过谨慎篡改?