msvcrtd.lib(MSVCRTD.dll) : error LNK2005:

参考了此文章  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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值