MSVS编译器标志/ bigobj的惩罚

lri*_*eau 42 c++ linker-errors visual-studio

基本的Google搜索bigobj问题表明很多人都遇到致命错误C1128:" 部分数量超出了目标文件格式限制:用/ bigobj编译 ".如果大量使用C++模板(如Boost库CGAL库),则错误发生的可能性更大.

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

所以这是我的问题:为什么默认情况下不设置该标志?使用该标志必须有惩罚,否则默认设置.MSDN中没有记录该惩罚.有人有线索吗?

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

Fré*_*idi 36

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

在Visual C++ 2005之前发布的链接器无法读取使用它生成的.obj文件/bigobj.

因此,默认情况下设置此选项会限制可以使用生成的对象文件的链接器数量.最好在需要的基础上激活它.

  • 我们已经到了 2020 年了。2005 年距离今天就像 1990 年到 2005 年发布时的距离一样遥远。2005 年的人们关心与 MS-DOS 6 时代链接器的兼容性吗?我非常怀疑。 (6认同)
  • 我觉得这只是答案的一部分.为什么gcc或clang不会出现这个问题?他们是否有类似`/ bigobj`直接内置和_always-on_的行为? (2认同)
  • @Ela782,mingw 对大目标文件有同样的问题。在这种情况下需要设置`-Wa,-mbig-obj`。可能,gcc 创建更小的 .obj 或有更大的大小限制。 (2认同)

Con*_*man 7

为什么默认情况下没有设置该标志?使用该标志必须受到惩罚,否则它将被默认设置。

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

有人提交了功能请求以设为/bigobj默认;请参阅https://developercommunity.visualstudio.com/t/Enable-bigobj-by-default/1031214