Я использую MS Visual Studio 2012 и пытаюсь использовать динамическую связанную библиотеку, которую я сам не написал. Я могу определить что-то Foo * foo; и все нормально, пока я не создаю новый объект, используя Foo * foo = new Foo (params); я получаю целый список ошибок:ошибка LNK2005 на внешней dll
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)" ([email protected][email protected]@@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)" ([email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z)
1>cyclone.lib(pfgen.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xran(void)" ([email protected][email protected]@@SAXXZ)
1>cyclone.lib(pworld.obj) : error LNK2019: unresolved external symbol "public: static void __cdecl std::_String_base::_Xlen(void)" ([email protected][email protected]@@SAXXZ) referenced in function "protected: bool __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Grow(unsigned int,bool)" ([email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected])
1>cyclone.lib(pfgen.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl std::_String_base::_Xlen(void)" ([email protected][email protected]@@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). Кто-нибудь знает, почему эта ошибка возникает и как ее исправить?
Это не ошибки компоновщика, которые вы получаете от использования DLL, вы получаете их от использования статической библиотеки. Это было построено с грубо несовместимыми настройками, а не только для библиотеки времени исполнения (/ MD vs/MT), а также другой версии стандартной библиотеки C++. Что сильно изменилось благодаря C++ 11. Вы не можете использовать эту библиотеку как есть, ее нужно перестроить. Если у вас нет источника, обратитесь к владельцу и попросите обновить его. –
Спасибо за ответ Ганс, у меня есть оригинальные файлы. Я думаю, что исходная версия была построена с использованием Visual Studio 2008, и я использую 2012 год. Если я перестрою .dlls, используя VS 2012, разрешит ли это проблему? – GeekPeek