链接器工具错误 LNK2005

Visual C++ 概念:生成 C/C++ 程序 

链接器工具错误 LNK2005

在对象中已定义符号

以修饰形式显示的给定 symbol 被多次定义。

可能的原因

  • 不慎同时与单线程库和多线程库链接。确保应用程序项目文件只包括适当的库,并且任何第三方库已适当创建了单线程或多线程版本。
  • 在也使用 /clr 时混合静态库和动态库。
  • 该符号为封装函数(通过用 /Gy 编译创建),包含在多个文件中,但在各编译间已改变。重新编译所有包含 symbol 的文件。
  • 以不同的形式在不同库中的两个成员对象中定义了该符号,并且使用了这两个成员对象。
  • 某个绝对符号被定义两次,而每次定义的值不同。
  • 头文件声明并定义了变量。可能的解决方案有:
    • 在 .h 中声明变量:extern BOOL MyBool;,然后在 .c 或 .cpp 文件中向它分配:BOOL MyBool = FALSE;
    • 将变量声明为 static。
    • 将变量声明为 selectany。
  • 当将 uuid.lib 与定义 GUID 的其他 .lib 文件(例如 oledb.lib 和 adsiid.lib)一起使用时。例如:
    oledb.lib(oledb_i.obj) : error LNK2005: _IID_ITransactionObject
    already defined in uuid.lib(go7.obj)

    若要修复,请将 /FORCE:MULTIPLE 添加到链接器命令行选项,并确保 uuid.lib 是引用的第一个库。

有关更多信息,请参见知识库文章:

  • Q148652,PRB: LNK2005 Errors When Link C Run-Time Libraries Are Linked Before MFC Libraries。
  • Q140440,FIX: Global Overloaded Delete Operator Causes LNK2005。
  • Q184235,PRB: LNK2005 Errors on New and Delete When Defining _ATL_MIN_CRT。

该错误之后为致命错误 LNK1169

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值