Link2005错误解决方法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值