Lnk2005 问题

首先感谢http://www.cnitblog.com/vcleaner/archive/2005/05/25/203.html这个地址的作者
另外自己参考了msdn的一些信息,地址:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vccomp/html/d9587adc-68be-425c-8a30-15dbc86717a4.htm
为了方便自己查询,转载部分:


造成LNK2005错误主要有以下几种情况:

1. 重复定义全局变量。
2. 头文件的包含重复。
3. 使用第三方的库造成的。
这种情况主要是C运行期函数库和MFC的库冲突造成的。
具体的办法就是将那个提示出错的库放到另外一个库的前面。
另外选择不同的C函数库,可能会引起这个错误。
微软和C有两种C运行期函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。
另外一种是支持多线程的:msvcrt.lib。
如果一个工程里,这两种函数库混合使用,可能会引起这个错误,
一般情况下它需要MFC的库先于C运行期函数库被链接,
因此建议使用支持多线程的msvcrt.lib。
所以在使用第三方的库之前首先要知道它链接的是什么库,
否则就可能造成LNK2005错误。
如果不得不使用第三方的库,可以尝试按下面所说的方法修改,
但不能保证一定能解决问题,前两种方法是微软提供的:


A、选择VC菜单Project->Settings->Link->Catagory选择Input,
再在Ignore libraries 的Edit栏中填入你需要忽略的库,
如:Nafxcwd.lib;Libcmtd.lib。
然后在Object/library Modules的Edit栏中填入正确的库的顺序,
这里需要你能确定什么是正确的顺序,呵呵,God bless you!


B、选择VC菜单Project->Settings->Link页,
然后在Project Options的Edit栏中输入/verbose:lib,
这样就可以在编译链接程序过程中在输出窗口看到链接的顺序了。


C、选择VC菜单Project->Settings->C/C++页,
Catagory选择Code Generation后
再在User Runtime libraray中选择MultiThread DLL等其他库,逐一尝试。


本人所遇到的问题是第3类

调试的时候,先采用B方法的/verbose:lib,然后A方法

本人在未看到上述方法,采用都是微软msdn提供的:若要修复,请将 /FORCE:MULTIPLE 添加到链接器命令行选项,并确保 uuid.lib 是引用的第一个库。

缺点就是:会出现Lnk4006的警告

备注:
在Lnk4098中有一份忽略列表可以参考
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vccomp/html/1f1b1408-1316-4e34-80f5-6a02f2db0ac1.htm

posted @ 2009-07-18 10:51  西就东城  阅读(557)  评论(1编辑  收藏  举报