外部DLL上的错误LNK2005

时间:2014-02-25 09:42:23

标签: visual-c++ dll

我正在使用MS Visual Studio 2012并尝试使用我自己没有写过的动态链接库。我可以定义一些Foo * foo;一切都很好,直到我用Foo * foo = new Foo(params)创建一个新对象; 我得到了一整套错误:

1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRTD.lib(MSVCR110D.dll)
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>cyclone.lib(pworld.obj) : error LNK2019: unresolved external symbol "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ) referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::erase(unsigned int,unsigned int)" (?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z)
1>cyclone.lib(pfgen.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)
1>cyclone.lib(pworld.obj) : error LNK2019: unresolved external symbol "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ) referenced in function "protected: bool __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Grow(unsigned int,bool)" (?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_NI_N@Z)
1>cyclone.lib(pfgen.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ)
1>C:\Users\deleo\Documents\Visual Studio 2012\Projects\AdvancedPhysics - Copy\Debug\AdvancedPhysics.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

所以我无法更改dll本身的任何代码。

我使用了一个#include(我查看了文件,如果用#ifndef保护的话)。 任何人都知道为什么会出现这种错误以及如何修复它?

1 个答案:

答案 0 :(得分:0)

您的项目和链接库必须使用相同的VC ++版本和相同的编译器选项。您可以使用PE(可移植可执行文件)查看器来查看链接器版本,以确定用于编译该DLL的编译器版本。

如果您的编译器版本与DLL相同。尝试将Runtime Library中的Project > Properties > Configuration Properties > C/C++ > Code Generation设置为MTMTd