CRT和MFC库的冲突--lnk2005错误

来源:互联网 发布:四川航天金穗Java开发 编辑:程序博客网 时间:2024/04/29 15:29

症状

当 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 库对 new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含 new、delete 和 DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。

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

微软提供的解决方案

选择:菜单“项目”-->“设置”->链接-->Input。

在第一行“对象/库模块”中最前面输入Nafxcwd.lib;Libcmtd.lib

在第二行“忽略库”框中,输入Nafxcwd.lib;Libcmtd.lib。

确定,重新链接,通过!

原创粉丝点击