在本来正常的工程里面新加入一个源文件(即使是一个空的.cpp文件),编译时就出现如下错误,去掉该源文件后,编译正常。
uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)
按照网上的说明,在工程属性中添加/verbose:lib项,查看本工程链接的顺序。
在编译输出窗口看到c库在mfc库之前链接导致错误。
1> Searching C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\LIBCMTD.lib:
1> Searching C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\OLDNAMES.lib:
1> Searching C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\lib\uafxcwd.lib:
1>
1> Finished searching libraries
1> Generating code
1> Finished generating code
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)
网上的解决方案,看起来太复杂,要设置链接库顺序,例如:
http://m.blog.csdn.net/blog/mail_cm/32910803
我的方法,记事本打开,.vcxproj文件,rotate.h本来是在XXXMFC.h之前的,将其移到最后,和其他C工程文件放一起,这样Visual Studio在编译的时候,先链接MFC库,后链接C库,问题解决!