今天,我发现我正在工作的编译静态库更大得多 释放 模式多于IN 调试. 。我发现这非常令人惊讶,因为大多数情况下发生了相反的情况(据我所知)。

调试模式下的大小略高于3 MB(一个相当大的项目),但在发行时,它高达6,5 MB。有人可以告诉我这是什么原因吗?我正在为静态库项目使用通常的Visual Studio(2008)设置,在构建配置设置中几乎没有任何更改。在发行版中,我使用 /o2,“偏爱大小或速度”设置为“都不”。 /o2(“最大化速度”)是否会导致最终.lib比带有所有调试信息的调试版本大得多?

编辑:附加信息:
调试:
- 整个程序优化:否
- 启用功能级别链接:否

释放:
- 整个程序优化:启用链接时间代码生成
- 启用功能级别链接:是

有帮助吗?

解决方案

区别是特别是因为链接时间代码生成。阅读章节链接时间代码生成 编译器 - 每个程序员对编译器优化的了解 在MSDN上 - 基本上说,LTCG打开编译器会产生更多的数据,这些数据包装到静态库中,以便链接器可以在实际链接可执行文件的同时使用该额外的数据来生成更好的机器代码。

由于您在调试配置中已关闭LTCG,因此生产的库明显较小,因为它没有额外的数据。

PS:原始链接(在2015年11月9日不工作)

其他提示

优化可能是这里的问题,特别是自动创建 inline 功能将更大,但发行速度比调试要快。

就我个人而言,我从未见过发行版PDB比调试PDB大。同样的协议。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top