33 c++ visual-studio-2005 lnk2005 visual-studio
我有一个Visual Studio 2005解决方案,有两个项目.一个是静态库,另一个是用于测试静态库中的功能的可执行文件.静态库使用MFC.我构建解决方案时遇到以下错误.
uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)
uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (?? 3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)
uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmtd.lib(newaop.obj)
uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) already defined in LIBCMTD.lib(delete2.obj)
Run Code Online (Sandbox Code Playgroud)
我不知道如何克服这一点.有人可以解释为什么会出现这个错误.任何给出概述.lib文件链接的解释都将受到高度赞赏.
小智 65
CRT库对新的,删除和DllMain函数使用弱外部链接.MFC库还包含new,delete和DllMain函数.这些函数需要在链接CRT库之前链接MFC库. http://support.microsoft.com/kb/148652
基于VS2005的解决方案(将Nafxcwd.lib替换为Uafxcwd.lib,用于~VS2013)
转到项目>属性>配置属性>链接器>输入
添加到"附加依赖项" - > Nafxcwd.lib Libcmtd.lib
添加到"忽略特定库" - > Nafxcwd.lib; Libcmtd.lib
库的顺序很重要(Nafxcwd.lib; Libcmtd.lib).
And*_*ens 11
要尝试的一件事是确保你有:
#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)
作为.cpp文件的第一行.我确信在所有情况下都不是答案,但在我的情况下,它会让同样的错误消失.
我在Visual Studio 2010的MFC解决方案中遇到了这个问题,同时在Project-> Properties-> Configuration Properties-> General中更改Use MFC in a Shared DLL为。Use MFC in a Static Library
我通过以下方式解决了这个问题,请首先找到项目->属性->配置属性->链接器->输入。
在调试模式下:
uafxcwd.lib;Libcmtd.lib在附加依赖。uafxcwd.lib;Libcmtd.lib在忽略特定的默认库。在发布模式下:
uafxcw.lib;Libcmt.lib在附加依赖。uafxcw.lib;Libcmt.lib在忽略特定的默认库。注意:
;两个.lib文件之间的。-d必须在调试模式下在文件中添加后缀。