nafxcwd.lib与libcmtd.lib冲突解决办法

来源:互联网 发布:wis水润面膜知乎 编辑:程序博客网 时间:2024/05/18 03:12

工程使用MTD编译时出现下列错误:

nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) 已经在 LIBCMTD.lib(new2.obj) 中定义
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) 已经在 LIBCMTD.lib(delete2.obj) 中定义
Debug/MediateServer.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
我在网上搜了下nafxcwd.lib,找到了些有用的网页:http://support.microsoft.com/kb/148652/zh-cnhttp://blog.csdn.net/soloist/archive/2005/09/30/493238.aspx

最后得到问题是库链接的时候发生冲突了(libcmtd.lib和nafxcwd.lib发生冲突),可以强制制定链接顺序解决问题(先链接 nafxcwd.lib,后链接libcmtd.lib)。最后的解决办法是在工程属性的"连接器","输入", "附加依赖"里面输入"nafxcwd.lib",这样VC.NET编译时会先链接nafxcwd.lib,问题就解决了.(libcmtd.lib对应调试版多线程静态C标准库, msvcrtd.lib对应调试版本多线程动态C标准库,nafxcwd.lib对应MFC静态连接库)

附:经常在写VC程序时,由debug转换成release配置时容易产生此类问题