将第三方源码生成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,就可以正常使用
当在VC6工程中引入第三方库my.lib时,遇到LNK2005错误,提示locale::facet接口已由msvcprtd.lib定义。原因是exe工程使用MFC共享DLL,而lib工程不使用MFC。解决方案是确保exe和lib都采用相同的MFC使用方式,如统一为动态或静态方式,并调整lib工程设置以匹配exe,重新生成lib即可解决问题。
451

被折叠的 条评论
为什么被折叠?



