MS Visual Studio 2008. Кажется, это проблема искажения имени, но я не могу найти правильные условия поиска, чтобы найти ответ.
У меня есть динамическая библиотека, в которой есть класс, который использует класс регистрации из статической библиотеки регистрации. Динамическая библиотека импортирует статическую библиотеку в настройках проекта. Я использую эту статическую библиотеку в других проектах, поэтому знаю, что она компилируется и связывается без ошибок.
Образец кода:
Dynamic.h:
extern "C"{
__declspec(dllexport) BYTE GetData();
};
Dynamic.cpp:
#include "MyClass.h"
static MyClass g_Inst;
BYTE GetData() { return g_Inst.GetData(); }
MyClass.h:
#include "Logging.h"
class MyClass
{
public:
BYTE GetData() { CLogging::Instance().AddString("Test"); }
};
Linker:
error LNK2019: unresolved external symbol "public: void __cdecl CLogging::AddString(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsOS<wchar_t> > > const &)" (?AddString@CLogging@@QAAXABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsOS@_W@ATL@@@@@ATL@@@Z) referenced in function "public: unsigned char __cdecl MyClass::GetData(void)" (?GetData@MyClass@@QAAEXZ)
Изменить: думая, что это может быть проблема Unicode или MFC, я проверил настройки проекта для динамического проекта:
Проект Logging:
И два других проекта, которые также без проблем запускают Logging:
Единственное отличие, которое я вижу, это то, что оно не работает, построено как динамическая библиотека.
Хотя это может быть случайным, ошибка, кажется, указывает на то, что компоновщик не может найти широкосимвольную версию ATL::CStringT<>
(обратите внимание на случаи wchar_t
следующий):
error LNK2019: unresolved external symbol "public: void __cdecl CLogging::AddString(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsOS<wchar_t> > > const &)" (?AddString@CLogging@@QAAXABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsOS@_W@ATL@@@@@ATL@@@Z) referenced in function "public: unsigned char __cdecl MyClass::GetData(void)" (?GetData@MyClass@@QAAEXZ)
Вы можете проверить настройки своего проекта и попытаться построить с использованием набора символов, отличного от Unicode.
Других решений пока нет …