关于"LNK2005"错误
来源:互联网 发布:软件安全性测试 csdn 编辑:程序博客网 时间:2024/06/05 22:40
问题:在vs2005环境下编译调试时,遇到”Error 186error LNK2005: "struct _tagDrSvrConfig drcfg" (?drcfg@@3U_tagDrSvrConfig@@A) already defined in configcontroller.lib(ConfigPage.obj)configcontroller.lib“ 这样的报错。
通过查看MSDN,如下:
通过检查下面的可能原因进行修复
在也使用 /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_ITransactionObjectalready 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
- 关于"LNK2005"错误
- 关于LNK2005的错误
- 关于vs编译器Lnk2005错误的随感
- LNK2005错误
- LNK2005错误
- LNK2005错误
- LNK2005错误
- LNK2005错误
- LNK2005错误
- LNK2005错误
- lnk2005错误
- 关于错误 LNK2005在对象中已定义符号
- 关于VC++ lnk2005 错误的比较详细的解释
- VC++的LNK2005错误
- VC++的LNK2005错误
- 转:LNK2005 错误
- LNK2005错误的解决
- 链接错误LNK2005
- Service的生命周期
- mysql学习笔记(5)
- 利用selenium webdriver下载不同类型的文件(pdf,txt等等)
- C# 迭代器简析
- Java根据用户IP查找用户地址信息
- 关于"LNK2005"错误
- 无效的字段名或字段索引
- 九度oj-1471-合并字符
- 手机安全卫士简单实现原理
- 平方根升余弦滤波器
- dfasdfe
- java.lang.IllegalArgumentException: taglib definition not consistent with specification version
- Cocos2d-js开发分辨率适配
- git ——映射远程分支到本地分支