надо сэкспортировать нужные имена в lib.
У меня есть
class __declspec(dllexport) PublicClass
{
class PrivateClass; // + инклуд PrivateClass.h в срр
PrivateClass* Get() const { return m_privateClass.get(); }
private:
std::unique_ptr<PrivateClass> m_privateClass;
};
...somwhere in DLL...
auto* privateClass = publicClass.Get();
privateClass->Foo();
в другом месте внутри длл этот код используется (образно через геттер) и я получаю ворнинг PrivateClass needs to have dll-interface to be used by clients of class 'PublicClass'
+ кучу ошибок линковки unique_ptr не могущего найти деструктор PrivateClass (объявлен в хедере, реализация в cpp = default)
Кто может объяснить мне магию линкера MSVC? Зачем мне экспортить то, что используется самой либой внутри себя и только?
А если надо кучу всего экспортить, юзер получит миллион ненужных ему символов, о которых он и знать-то не должен. как такое решать?
Не нужно, все делается автоматом.
Если ты покажешь весь свой код, это можно будет объяснить. Если нет, учти, что это всего лишь warning, а не ошибка
Обсуждают сегодня