发布模式静态库比调试模式版本大得多

Pet*_*erK 19 c++ static-libraries release-mode debug-mode

今天我发现我正在处理的编译静态库在Release模式下比在Debug中大得多.我发现它非常令人惊讶,因为大部分时间恰好相反(据我所知).

调试模式下的大小略大于3 MB(这是一个相当大的项目),但在发布时它最多可达到6.5 MB.有人能告诉我这可能是什么原因吗?我正在使用静态库项目的常规Visual Studio(2008)设置,在构建配置设置中几乎没有更改.在发布时,我正在使用/ O2并且"赞成大小或速度"被设置为"不会"./ O2("最大化速度")是否会导致最终的.lib比包含所有调试信息的调试版本大得多?

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

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

sha*_*oth 30

区别在于链接时代码生成.阅读编译器中的链接时代码生成一章- 每个程序员应该知道的关于 MSDN上编译器优化的内容 - 它基本上说,当LTCG打开时,编译器会生成更多数据,这些数据被打包到静态库中,以便链接器可以使用它用于在实际链接可执行文件时生成更好的机器代码的额外数据.

由于您在调试配置中关闭了LTCG,因此生成的库明显更小,因为它没有额外的数据.

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

  • 谢谢,这解释了很多! (3认同)