Link2005错误解决方法

来源:互联网 发布:java list 多元素排序 编辑:程序博客网 时间:2024/04/28 22:58

Link2005错误解决方法

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) 中定义

此错误出现原因是C(CRT)库与MFC库链接顺序不正确导致

原因:CRT 库对 newdelete 等一些函数使用弱外部链接。MFC 库也包含 newdelete 等相同的 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。若是顺序相反,则出现重定义的错误。

解决方法有两种:一种是在项目设置中对库的链接进行忽略设置,强制链接器按正确顺序执行,具体如下:

VC++6.0: [Project]->[Setting]:选中项目Debug还是Release->[Link]->[Category]:Input->在Object/library modules中添加:Nafxcwd.lib Libcmtd.lib,然后再Ignore libraries也添加:Nafxcwd.lib Libcmtd.lib。然后重新编译,OK!

另一种方法:找出链接顺序错误的地方,改正链接顺序即可,可使用如下方法查看:

要查看当前的库链接顺序,请按照下列步骤操作:

  1. 在“Project”菜单上,单击“Setting”。
  2. 选中Link选项卡,在“项目选项”框中键入 /verbose:lib
  3. 重新生成项目。在链接过程中,这些库将在输出窗口中列出。
  4. 然后可以查看链接库的顺序了
VC++摘要有详细说明:http://support.microsoft.com/kb/148652/zh-cn

原创粉丝点击