关于错误 LNK2005在对象中已定义符号

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 pdiy 的 blog

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。

本文关键:关于错误 LNK2005在对象中已定义符号
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top