Неразрешенный внешний член класса при связывании статической библиотеки из динамической библиотеки DLL

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:

Настройки рабочего проекта 1

Настройки рабочего проекта 2

Единственное отличие, которое я вижу, это то, что оно не работает, построено как динамическая библиотека.

-1

Решение

Хотя это может быть случайным, ошибка, кажется, указывает на то, что компоновщик не может найти широкосимвольную версию 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.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector