Visual Studio 15编译报LNK1169错误,Dev-C++无问题求解答
解决Visual Studio 15中LNK1169: 存在一个或多个多重定义符号的错误
咱们先拆解下问题:你的代码在Dev-C里能正常跑,但在VS 15里触发了LNK1169链接错误,核心原因是VS的MSVC编译器套件和Dev-C用的MinGW库,在处理_getch()这类非标准Windows函数时的符号定义规则不一样,导致链接阶段出现了符号重复的冲突。
下面给你几个靠谱的解决办法:
方案1:替换非标准函数为标准库实现
_getch()是微软特有的非标准函数,咱们可以用标准C库的getchar()来替代,既能实现“等待用户输入再退出”的需求,又能避开链接冲突。修改代码里的_getch();为:
// 先吸收之前scanf_s留下的换行符,避免程序直接退出 getchar(); getchar();
第一行getchar()是吃掉你输入样本数量、宽高后留在输入缓冲区的换行符,第二行才是等待你按下任意键。
方案2:添加VS兼容库解决符号冲突
如果你一定要保留_getch(),可以通过链接VS的兼容库来解决:
- 方式一:修改项目设置
右键你的VS项目 → 属性 → 链接器 → 输入 → 附加依赖项,添加legacy_stdio_definitions.lib - 方式二:直接在代码开头加一行编译指令
#pragma comment(lib, "legacy_stdio_definitions.lib")
这个库是MSVC用来兼容旧版标准库符号定义的,能直接解决这类多重定义的问题。
方案3:检查项目是否存在重复文件
虽然你的代码是单个源文件,但偶尔也会因为VS项目里不小心添加了重复的.c文件导致链接错误。你可以右键项目 → 查看所有文件,确认没有重复添加同一个源文件的情况。
补充:为什么Dev-C++没问题?
Dev-C++基于MinGW(GCC的Windows移植版),它的库对_getch()的符号定义逻辑和MSVC不同,不会触发多重定义的链接检查,所以能正常编译运行。
内容的提问来源于stack exchange,提问作者Vrihan
相关产品推荐
相关产品推荐

