您的位置:首页 > 其它

error LNK2005; VC6工程引入.lib时链接出错

2014-11-10 11:15 344 查看
将第三方源码生成my.lib,引入自己的工程.exe,报错

libcp.lib(locale0.obj) :
error LNK2005: "public: class std::locale::facet const * __thiscall std::locale::_Getfacet(unsigned int,bool)const " (?_Getfacet@locale@std@@QBEPBVfacet@12@I_N@Z) already defined in msvcprtd.lib(MSVCP60D.dll)

大意:在链接 libcp.lib时,发现某个接口_Getfacet已经在msvcprtd.lib中定义

PS: 如果工程(.exe)直接引入源码(.h/.cpp)直接编译链接,可以正常运行;

问题原因

项目工程(.exe)和lib使用MFC方式不同,(一个动态方式,一个静态方式)

exe工程属性是Use MFC in a shared dll,运行时从dll找函数,

my.lib工程属性是Not Using MFC,使用的是staitc函数,导致msvcprtd.lib中某些函数,例如_Getfacet已被包含到my.lib中,

当exe查找dll指向的函数时,发现已在my.lib中存在,就会导致冲突

解决方法:

exe和lib两个工程用同样方式使用库,比如都动态或者都静态,高版本vc就是都用/MD或者/MT

比如本人VC6中将lib工程 Project Setttins->General->Microsoft Foundation Classes 从Not Using MFC改为Use MFC in a shared dll,再重新生成my.lib,就可以正常使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐