надо сэкспортировать нужные имена в 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, а не ошибка
Обсуждают сегодня