0

Всем привет! Скачал tinyxml (2.6.1), положил как предписано в папку своего проекта, в сорс файле проекта прописал

#include "tinyxml/tinyxml.h"
#include "tinyxml/tinystr.h"

обращаюсь из функции main() к функциям библиотеки. Но при построении проекта линковщик ругается:

1>Client.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: virtual __thiscall TiXmlNode::~TiXmlNode(void)" (??1TiXmlNode@@UAE@XZ) в функции "public: virtual __thiscall TiXmlDocument::~TiXmlDocument(void)" (??1TiXmlDocument@@UAE@XZ)
1>Client.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: class TiXmlElement const * __thiscall TiXmlNode::NextSiblingElement(char const *)const " (?NextSiblingElement@TiXmlNode@@QBEPBVTiXmlElement@@PBD@Z) в функции "public: class TiXmlElement * __thiscall TiXmlNode::NextSiblingElement(char const *)" (?NextSiblingElement@TiXmlNode@@QAEPAVTiXmlElement@@PBD@Z)
1>Client.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: class TiXmlElement const * __thiscall TiXmlNode::FirstChildElement(char const *)const " (?FirstChildElement@TiXmlNode@@QBEPBVTiXmlElement@@PBD@Z) в функции "public: class TiXmlElement * __thiscall TiXmlNode::FirstChildElement(char const *)" (?FirstChildElement@TiXmlNode@@QAEPAVTiXmlElement@@PBD@Z)
1>Client.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: char const * __thiscall TiXmlElement::GetText(void)const " (?GetText@TiXmlElement@@QBEPBDXZ) в функции "void __cdecl init(class Agentpp::Mib &)" (?init@@YAXAAVMib@Agentpp@@@Z)
1>Client.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall TiXmlDocument::TiXmlDocument(void)" (??0TiXmlDocument@@QAE@XZ) в функции "void __cdecl init(class Agentpp::Mib &)" (?init@@YAXAAVMib@Agentpp@@@Z)
1>Client.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: bool __thiscall TiXmlDocument::LoadFile(char const *,enum TiXmlEncoding)" (?LoadFile@TiXmlDocument@@QAE_NPBDW4TiXmlEncoding@@@Z) в функции "void __cdecl init(class Agentpp::Mib &)" (?init@@YAXAAVMib@Agentpp@@@Z)
1>Client.obj : error LNK2001: неразрешенный внешний символ ""public: virtual char const * __thiscall TiXmlDocument::Parse(char const *,class TiXmlParsingData *,enum TiXmlEncoding)" (?Parse@TiXmlDocument@@UAEPBDPBDPAVTiXmlParsingData@@W4TiXmlEncoding@@@Z)"
1>Client.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall TiXmlDocument::Print(struct _iobuf *,int)const " (?Print@TiXmlDocument@@UBEXPAU_iobuf@@H@Z)"
1>Client.obj : error LNK2001: неразрешенный внешний символ ""public: virtual bool __thiscall TiXmlDocument::Accept(class TiXmlVisitor *)const " (?Accept@TiXmlDocument@@UBE_NPAVTiXmlVisitor@@@Z)"
1>Client.obj : error LNK2001: неразрешенный внешний символ ""protected: virtual class TiXmlNode * __thiscall TiXmlDocument::Clone(void)const " (?Clone@TiXmlDocument@@MBEPAVTiXmlNode@@XZ)"
1>Client.obj : error LNK2001: неразрешенный внешний символ ""private: static struct TiXmlString::Rep TiXmlString::nullrep_" (?nullrep_@TiXmlString@@0URep@1@A)"

В коде проверял - все эти функции объявлены и зарезолвены, компилятор их видит.

Harry
  • 221,325
AVM
  • 369
  • А линковщик библиотечный файл видит? – Harry Feb 07 '17 at 08:51
  • Вот как сделать так чтобы линковщик видел этот хедер файл? Вообще никаких lib для этой tinyxml не предполагается... У меня MS Visual Studio 2015 Professional. – AVM Feb 07 '17 at 09:15
  • Вы путаете компилятор с линковщиком. – nick_n_a Feb 07 '17 at 09:15
  • У вас dll-ка есть? У вас lib-есть? Для соидинения готового кода с dll есть два способа 1. lib-файл (прописываете или в опции линкера или pragma) Само проще скачать lib в нете и прописать в проэкте. 2. def-файл где прописываете отношение алиаса ??0TiXmlDocument@@QAE@XZ к функции в dll (впринципе lib примерно равен def). этот способ работает, но сложнее, используется как крайний случай. – nick_n_a Feb 07 '17 at 09:19
  • Если внутри библиотеки алиасы такие же как у вас написано (??0TiXmlDocument@@QAE@XZ, их можно увидеть допустим утилитой exescope) то lib файл можно создать утилитой implib. – nick_n_a Feb 07 '17 at 09:23
  • Как ещё вариант, вам нужно реализацию хедеров т.е. cpp - тоже включить в проэкт - тогда не нужно dll подключать. Функции должны быть либо реализованы, либо подключены через lib+dll. Для получения dll вам нужно открыть проэкт tinyxml и собрать его. Тогда dll будет в release, а уже его можно включить в проэкт. – nick_n_a Feb 07 '17 at 09:29
  • Я компилятор с линковщиком не путаю, просто - если tinyxml у меня есть хедеры и сорсы, то зачем тут lib / dll ? Хотя - в дереве проекта есть раздел "внешние зависимости", там есть tinyxml.h. Но мне тогда видимо надо его оттуда убрать и добавить в раздел "Заголовочные файлы", а сорсы - в "Файлы исходного кода". Попробую – AVM Feb 07 '17 at 09:49
  • Судя по CMakeLists.txt предполагается сборка статической или динамической библиотеки, которую вкупе с заголовочными файлами, можно будет использовать в своем проекте. – Vladimir Gamalyan Feb 07 '17 at 10:32
  • Кстати, в дистрибутиве идет solution под visual studio для сборки библиотеки. – Vladimir Gamalyan Feb 07 '17 at 10:33

0 Answers0