You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:26:29