链接器工具错误 LNK1237

在代码生成过程中,编译器引入了对符号“symbol”的引用,该符号是在使用 /GL 编译的模块“module”中定义的

注解

在代码生成过程中,编译器不应引入之后解析为 /GL 编译定义的符号。 symbol 是引入并在之后解析为定义(通过使用 /GL 编译)的一个符号。

有关详细信息,请参阅 /GL(全程序优化)

若要解析 LNK1237,请勿使用 /GL 编译符号或使用 /INCLUDE(强制符号引用)来强制引用符号。

示例

以下示例生成 LNK1237。 若要解决此错误,请勿初始化 LNK1237_a.cpp 中的数组并将 /include:__chkstk 添加到链接命令。

源文件 LNK1237_a.cpp

// LNK1237_a.cpp
int main() {
   char c[5000] = {0};
}

源文件 LNK1237_b.cpp

// LNK1237_b.cpp
// compile with: /GS- /GL /c LNK1237_a.cpp
// processor: x86
// post-build command: (lib LNK1237_b.obj /LTCG & link LNK1237_a.obj LNK1237_b.lib /nodefaultlib /entry:main /LTCG)
extern "C" void _chkstk(size_t s) {}