关于"LNK2005"错误

问题:在vs2005环境下编译调试时,遇到”Error 186error LNK2005: "struct _tagDrSvrConfig drcfg" (?drcfg@@3U_tagDrSvrConfig@@A) already defined in configcontroller.lib(ConfigPage.obj)configcontroller.lib“ 这样的报错。

通过查看MSDN,如下:

通过检查下面的可能原因进行修复

  1. 在也使用 /clr 时混合静态库和动态库。

  2. 该符号为封装函数(通过用 /Gy 编译创建),包含在多个文件中,但在各编译间已改变。重新编译所有包含symbol 的文件。

  3. 以不同的形式在不同库中的两个成员对象中定义了该符号,并且使用了这两个成员对象。

  4. 某个绝对符号被定义两次,而每次定义的值不同。

  5. 头文件声明并定义了变量。可能的解决方案包括:

    • 在 .h 中声明变量:extern BOOL MyBool;,然后在 .c 或 .cpp 文件中向它分配:BOOL MyBool = FALSE;

    • 将变量声明为 static。

    • 将变量声明为 selectany。

  6. 当将 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 是引用的第一个库。 

其中选项5为最接近的原因。

解决:把 struct _tagDrSvrConfig drcfg的定义放在CPP文件中(原来是放在.h文件上定义),通过externstruct _tagDrSvrConfig drcfg声明,可以在当前文件中使用。

总结: 全局变量是针对整个工程的。正确的应该是在一个CPP文件中定义如下:int   g_Test;那么在使用的CPP文件中就应该使用:extern   int g_Test即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值