参考了此文章 http://www.cnblogs.com/chenkai/archive/2013/01/23/2873932.html
msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _wcscpy already defined in libcmtd.lib(wcscat.obj)
msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _swprintf already defined in libcmtd.lib(swprintf.obj)
msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _wcscat already defined in libcmtd.lib(wcscat.obj)
msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _free already defined in libcmtd.lib(dbgheap.obj)
msvcrtd.lib(MSVCRTD.dll) : error LNK2005: _malloc already defined in libcmtd.lib(dbgheap.obj)
错误背景:
主程序引用静态库:
使用的静态库是基于MFC编译的lib (要动态链接MFC库)
主程序用动态链接MFC库时没有问题,静态链接MFC时出现以上错误
网上有很多说在配置中忽略掉 libcmtd.lib,然后编译成功。但是我采用此方法后又出现其它错误:
uafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___wargv
uafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argc
看来还是没有针对我这个使用MFC的静态库找到原因。
然后继续尝试,联系网上资料及之前使用MFC的对话框库引起资源冲突的办法,找到解决方法:
解决方法:主程序使用预处理宏 _AFXDLL,然后在 "C/C++"->Code Generation(代码生成)->Use run-time library(使用运行库)中选择 (Debug)Multithreaded DLL
注意:
1.基于MFC的静态库要动态链接MFC库(Use MFC in a Shared DLL).2.主程序改变某些编译选项后,会自动去掉预处理宏 _AFXDLL 并且会 恢复Multithreaded DLL为默认值 Multithreaded