Неразрешенные внешние факторы при создании статической библиотеки, в которой используется PugiXml - PullRequest
1 голос
/ 16 января 2012

Я пишу статическую библиотеку, которая использует PugiXml для разбора xml. Вот вывод компоновщика из Visual Studio 2010 (я заменил символ на эллипсы для удобства чтения):

error LNK2019: unresolved external symbol "public: __thiscall Dae_Library<class Dae_Geometry>::Dae_Library<class Dae_Geometry>(void)" (...) referenced in function "private: bool __thiscall Dae_Doc::ParseDae(void)" (...)
error LNK2019: ^ "public: wchar_t const * __thiscall pugi::xml_node::name(void)const " (...) referenced in function "private: bool __thiscall Dae_Doc::ParseDae(void)" (...)
error LNK2001: ^ "public: wchar_t const * __thiscall pugi::xml_node::name(void)const " (...)
error LNK2019: ^ "public: wchar_t const * __thiscall pugi::xml_attribute::value(void)const " (...) referenced in function "public: void __thiscall Dae_Node::SetXmlNode(class pugi::xml_node &)" (...)
error LNK2019: ^ "public: class pugi::xml_attribute __thiscall pugi::xml_node::attribute(wchar_t const *)const " (...) referenced in function "public: void __thiscall Dae_Node::SetXmlNode(class pugi::xml_node &)" (...)

Вещи, которые я пробовал:

  • Явно создаю экземпляр класса моего шаблона.
  • Связывание исходного кода PugiXml с тестовым проектом (в данный момент это статическая библиотека, которую я создаю)
  • Сборка PugiXml как статической библиотеки и ссылки на нее как в моем проекте lib, так и в тестовом проекте
  • Запись ничего не делает вместо моих чисто виртуальных функций.
  • Предоставление конструкторов по умолчанию, которые вообще не ссылаются на pugixml

Это сводило меня с ума в течение последних двух дней, и я действительно понятия не имею, что делать. Если бы кто-нибудь вообще мог дать мне какое-либо направление, я бы сильно оценил бы это!

Edit: Стоит отметить, что создание простой статической библиотеки, которая использует pugixml, прекрасно компилируется и тестирует, так что, возможно, что-то не так с тем, как я написал свои шаблоны и классы?

1 Ответ

0 голосов
/ 17 января 2012

Из сообщений об ошибках похоже, что вы устанавливаете PUGIXML_WCHAR_MODE непоследовательно.

Вероятно, вы устанавливаете его в конфигурации своего проекта и используете один из связанных файлов vcproj из scripts / folder внутри pugixml.Распределение как есть.

Это определение управляет типом символа, используемого в pugixml (char или wchar_t);Вы должны установить его одинаково как для pugixml.cpp, так и для кода, который использует pugixml - рекомендуется либо установить его в pugiconfig.hpp, либо убедиться, что он включен во всех проектах, в которых есть исходные файлы, содержащие pugixml..hpp.В вашем случае, если вы не хотите изменять pugiconfig.hpp, вам придется изменить статическую библиотеку vcproj для pugixml.

...