【编译器问题】“fatal error LNK1169: 找到一个或多个多重定义的符号“ 解决方案

文档声明:
以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。感谢各位的参考查看。


笔记资料仅供学习交流使用,转载请标明出处,谢谢配合。
如果存在相关知识点的遗漏,可以在评论区留言,看到后将在第一时间更新。
作者:Aliven888

1、背景

  今天周末在整理自己的常用函数库时,突然遇到了一个问题,觉得很有意思,和各位共享一下。

环境:
  笔记本:win7 x64
  编译器:Visual Studio 2015
  编译环境:Release x86

问题描述:

1>STLMap.obj : error LNK2005: "void __cdecl merge(class std::vector<int,class std::allocator<int> > &,int,class std::vector<int,class std::allocator<int> > &,int)" (?merge@@YAXAAV?$vector@HV?$allocator@H@std@@@std@@H0H@Z) 已经在 ConsoleApplication.obj 中定义
1>STLMap.obj : error LNK2005: "int __cdecl maxProfit(class std::vector<int,class std::allocator<int> > &)" (?maxProfit@@YAHAAV?$vector@HV?$allocator@H@std@@@std@@@Z) 已经在 ConsoleApplication.obj 中定义
1>STLMap.obj : error LNK2005: "long __stdcall MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *)" (?MyUnhandledExceptionFilter@@YGJPAU_EXCEPTION_POINTERS@@@Z) 已经在 ConsoleApplication.obj 中定义
1>STLMap.obj : error LNK2005: "void __cdecl MyDumpGenerate(void)" (?MyDumpGenerate@@YAXXZ) 已经在 ConsoleApplication.obj 中定义
1>D:\VS2015\Project\AlivenProject\\ConsoleApplication\bin\Win32\Release\ConsoleApplication.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========

问题分析:
  首先说一下出现这种问题的前提:我在整理自己写的常用函数库时,将头文件都都已放在了一个 AlivenLibDef.h 文件中(新建的),但是我在链接(导入头文件)时,却链接(导入头文件)成了 ConsoleApplicationdef.h (项目的头文件,用于引入常用函数库)。

截图如下:

在这里插入图片描述

解决方案:
  修改成正确的头文件进行链接(导入)。然后在编译就没问题了。
在这里插入图片描述

注意事项:

  像这种问题,感觉一般会出现想我这样修改代码库结构(变更库文件)的情况下,或者更改部分库文件目录(路径)或者名称时会出现;说实话,当时出现时也是直接蒙了,按理说这些库我都用了很久了,怎么就出问题了呢。然后仔细分析了下错误描述,才发现原来是自己链接头文件搞错了。
  这里做个笔记,以避免以后遇见类似的问题,同时也和各位共享下,以备日后遇到类似问题时,提供一种排查思路。

笔记跟新记录

时间内容
2020-11-08创建笔记
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值