VS2022编译独立C++代码遇链接器入口点未定义错误
问题解决:VS2022中指定自定义入口点仍报LNK1561错误
核心原因
你遇到的问题本质是**C名字修饰(Name Mangling)**导致的:C编译器会对函数名进行编码(比如Test会被编译为?Test@@YAHXZ这类符号),而你通过/ENTRY:Test指定的是未修饰的C风格符号,链接器找不到匹配的入口点,因此报错。
解决方案
1. 用extern "C"禁用名字修饰
修改代码,给Test函数加上extern "C"声明,让编译器按C语言规则生成未修饰的符号:
#include <cstdint> extern "C" int32_t Test() { int64_t Var1 = 0; Var1++; return 0; }
2. 清理不必要的编译器选项
你的编译器中包含/clr:nostdimport和/clr:nostdlib选项,这些是针对托管.NET代码的配置,对于裸机风格的原生C++代码完全不需要,建议移除以避免潜在的编译/链接干扰:
修改后的编译器标志:
/GS /GY /GL /Zl *.cpp
3. 确认链接器选项的正确性
确保/ENTRY:Test确实被正确传递给链接器:
- 若通过VS项目属性配置:右键项目→属性→链接器→高级→入口点,直接填写
Test即可,无需手动在命令行输入。 - 若使用手动命令行,确认
/ENTRY:Test位置正确、无拼写错误。
额外注意(x64平台)
x64 Windows平台有统一的函数调用约定,extern "C"修饰后的Test函数签名(无参数、int32_t返回值)完全符合链接器对入口点的要求,无需额外调整调用约定。
内容的提问来源于stack exchange,提问作者user19819208
相关产品推荐
相关产品推荐

