MSVS编译器标志/bigobj的惩罚

Penalty of the MSVS compiler flag /bigobj

本文关键字:惩罚 bigobj 编译器 标志 MSVS      更新时间:2023-10-16

基本的谷歌搜索bigobj问题表明,很多人正在经历致命错误C1128: "部分数量超过对象文件格式限制:编译/bigobj"。如果大量使用c++模板库,如Boost库或CGAL库,则更有可能发生此错误。

这个错误很奇怪,因为它给出了自己的解决方案:设置编译器标志/bigobj !

我的问题是:为什么这个标志不是默认设置的?使用该标志必须受到惩罚,否则它将被默认设置。该处罚在MSDN中没有记录。有人知道吗?

我问这个问题是因为我想知道CGAL的配置系统是否应该默认不设置/bigobj

文档确实提到了/bigobj的一个重要缺点:

Visual c++ 2005之前发布的

链接器不能读取。obj文件

因此,默认设置此选项将限制可以使用最终目标文件的链接器的数量。最好在需要的时候激活它。

为什么这个标志不是默认设置的?使用该标志必须有惩罚,否则它将被默认设置。

我的快速非正式实验显示,使用/bigobj后。obj文件比不使用CC_5时大2%左右。这是一个很小的惩罚,但不是零。

有人提交了一个功能请求,使/bigobj默认;参见https://developercommunity.visualstudio.com/t/Enable-bigobj-by-default/1031214。