错误 C1128

节数超过对象文件格式限制: 请使用 /bigobj 进行编译

.obj 文件超出了允许的节数,即 COFF 对象文件格式限制。

达到此节数限制可能是因为使用了 /Gy 和调试版本;/Gy 使函数进入其自己的 COMDAT 节。 在调试版本中,每个 COMDAT 函数都有一个调试信息节。

内联函数过多时,也可能导致 C1128。

若要更正此错误,请将源文件分成多个源代码文件,在不使用 /Gy 的情况下进行编译,或使用 /bigobj(增加 .Obj 文件中的节数)进行编译。 如果不使用 /Gy 进行编译,则需要单独指定优化,因为 /O2 和 /O1 都表示 /Gy

如果可能,请在没有调试信息的情况下进行编译。

可能还需要在单独的源代码文件中具有特定的模板实例化,而不是让编译器发出它们。

移植代码时,使用 x64 编译器可能会首先出现 C1128,而使用 x86 编译器可能会晚些出现。 x64 将至少有 4 节与编译 /Gy 或从模板或类内联内联的每个函数相关联:代码、pdata 和调试信息,可能还有 xdata。 X86 则没有 pdata。