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工程属性是Use MFC in a shared dll,运行时从dll找函数,
my.lib工程属性是Not Using MFC,使用的是staitc函数,导致msvcprtd.lib中某些函数,例如_Getfacet已被包含到my.lib中,
当exe查找dll指向的函数时,发现已在my.lib中存在,就会导致冲突
比如本人VC6中将lib工程 Project Setttins->General->Microsoft Foundation Classes 从Not Using MFC改为Use MFC in a shared dll,再重新生成my.lib,就可以正常使用
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,就可以正常使用
相关文章推荐
- 【链接库出错】:error LNK2005: "void __cdecl operator ***(void *)" (??3@YAXPAX@Z) 已经在xxxx.lib中定义
- 使用Tinyxml.lib链接出错问题解决 (LIBCMT.lib(sprintf.obj) : error LNK2005: _sprintf_s 已经在 msvcrtd.lib(MSVCR80D.dll) 中定义)
- 使用Tinyxml.lib链接出错问题解决 (LIBCMT.lib(sprintf.obj) : error LNK2005: _sprintf_s 已经在 msvcrtd.lib(MSVCR80D.dll) 中定义)
- (转+原)VC编译错误:uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMT.lib(new.obj) 中定义
- VS2005(VC6)出现如下链接错误的解决方法uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsign
- VC缺省链接库的顺序不对导致链接错误error LNK2005: "void __cdecl operator delete(void *)"
- VC编译错误:msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class typ
- 关于VC的错误 error LNK2005:xxxx already defined in xxxx.lib
- VC6错误:libcmtd.lib(ccccc.obj) :error lnk2005:xxxx already defined in libcd.lib(ccccc.obj)
- VC编译错误:uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPA
- VC编译错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义
- json静态链接错误:msvcprtd.lib(MSVCP100D.dll) : error LNK2005:解决方案
- vs工程链接出现error LNK2005...already defined
- VC: error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
- VC缺省链接库的顺序不对导致链接错误error LNK2005: "void __cdecl operator delete(void *)"
- VC++编译错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义
- VC编译错误:uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPA
- VC编译错误:msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class typ
- VS2005链接问题: LNK2005错误 :error LNK2005: _free 已经在 libcmtd.lib(dbgheap.obj) 中定义
- VC编译错误:uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPA