2012-01-16 3 views
1

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

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 &)" (...) 

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

  • Явное инстанцировании мой шаблонный класс. источник
  • Linking PugiXml с использованием тестового проекта (в настоящий момент с помощью статического Lib я в здании)
  • Building PugiXml как статический Lib и не ссылаться на него как в моем Lib проекта и тестовый проект
  • Writing делать ничего вместо моих чистых виртуальных функций.
  • Обеспечение по умолчанию конструкторы, которые не ссылаются pugixml на всех

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

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

+0

Вы уверены, что DLL библиотеки PugiXml находится по умолчанию, где компоновщик может ее найти? –

+0

@ H2CO3 Я не использую Pugixml как dll. Он распространяется в исходной форме, и для его использования вам просто нужно добавить его в свой проект. Когда я использовал его как статическую библиотеку, у меня были правильные пути. – user1152415

ответ

0

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

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

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

+0

Ну, это решает эту проблему! Большое вам спасибо, но теперь я получаю нерешенные внешние ссылки на свой конструктор класса шаблонов и деструктор ... – user1152415

+1

Получил его работу. Примечание для себя: при написании шаблонов сделайте * everthing * inline. Еще раз спасибо zeuxcg! – user1152415