游子的博客
慈母手中线,游子身上衣, 临行密密缝,意恐迟迟归, 谁言寸草心,报得三春晖。 数据读取中,请稍候......
posts - 337,  comments - 546,  trackbacks - 0

症状

当 C 运行时 (CRT) 库和 Microsoft 基础类 (MFC) 库的链接顺序有误时,可能会出现以下 LNK2005 错误之一:
nafxcwd.lib(afxmem.obj) :error LNK2005:
"void * __cdecl operator new(unsigned int)"(??2@YAPAXI@Z) already
defined in LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj) :error LNK2005:
"void __cdecl operator delete(void *)"(??3@YAXPAX@Z) already defined
in LIBCMTD.lib(dbgnew.obj)
nafxcwd.lib(afxmem.obj) :error LNK2005:
"void * __cdecl operator new(unsigned int,int,char const *,int)"
(??2@YAPAXIHPBDH@Z) already defined in LIBCMTD.lib(dbgnew.obj)
mfcs40d.lib(dllmodul.obj):error LNK2005:_DllMain@12 already defined in
MSVCRTD.LIB (dllmain.obj)
mfcs42d.lib(dllmodul.obj):error LNK2005:_DllMain@12 already defined in
msvcrtd.lib(dllmain.obj)
 

原因

CRT 库对 newdeleteDllMain 函数使用弱外部链接。MFC 库也包含 newdeleteDllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。

解决方案:强制链接器按照正确的顺序链接库

微软提供了两种解决方案,第2种我没有看懂,第1种我用了,简单搞定(我下面的说法可能更接近中国人的习惯):

选择:菜单“项目”-->“设置”->链接-->Input。
在第一行“对象/库模块”中最前面输入Nafxcwd.lib;Libcmtd.lib
在第二行“忽略库”框中,输入Nafxcwd.lib;Libcmtd.lib。
确定,重新链接,通过!

http://support.microsoft.com/?scid=kb;zh-cn;148652&spid=2990

posted on 2006-12-25 14:55 游子 阅读(6739) 评论(1)  编辑 收藏 引用 所属分类: 软件

FeedBack:
# re: CRT和MFC库的冲突--lnk2005错误[未登录]
2010-10-22 08:59 | 路过
其实这样修改更好:
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:windows改成/subsystem:console   回复  更多评论
  
只有注册用户登录后才能发表评论。

欢迎大家扔鸡蛋!送鲜花!

博客可以收入过千吗?

<2006年12月>
日一二三四五六26272829301234567
8910111213141516171819202122232425262728293031123456

常用链接

留言簿(8)

随笔分类(314)

随笔档案(337)

文章分类(7)

文章档案(10)

相册

收藏夹(1)

其它

友情链接

数字电视

生活、旅游

自己的链接

计算机

搜索

  •  

积分与排名

  • 积分 - 403603
  • 排名 - 9

最新评论

阅读排行榜

评论排行榜