Using TinyXML (Linking Libraries in C ++)

+ Hi ... I'm a newbie ... and I don't know how to include external libraries in C ++. It's difficult.

I want to use TinyXML. so i did this:

example2.cpp

#include <iostream>
#include "tinyxml.h"


void write_app_settings_doc( )  
{  
    TiXmlDocument doc;  
    TiXmlElement* msg;
    TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" );  
    doc.LinkEndChild( decl );  

    TiXmlElement * root = new TiXmlElement( "MyApp" );  
    doc.LinkEndChild( root );  

    TiXmlComment * comment = new TiXmlComment();
    comment->SetValue(" Settings for MyApp " );  
    root->LinkEndChild( comment );  

    TiXmlElement * msgs = new TiXmlElement( "Messages" );  
    root->LinkEndChild( msgs );  

    msg = new TiXmlElement( "Welcome" );  
    msg->LinkEndChild( new TiXmlText( "Welcome to MyApp" ));  
    msgs->LinkEndChild( msg );  

    msg = new TiXmlElement( "Farewell" );  
    msg->LinkEndChild( new TiXmlText( "Thank you for using MyApp" ));  
    msgs->LinkEndChild( msg );  

    TiXmlElement * windows = new TiXmlElement( "Windows" );  
    root->LinkEndChild( windows );  

    TiXmlElement * window;
    window = new TiXmlElement( "Window" );  
    windows->LinkEndChild( window );  
    window->SetAttribute("name", "MainFrame");
    window->SetAttribute("x", 5);
    window->SetAttribute("y", 15);
    window->SetAttribute("w", 400);
    window->SetAttribute("h", 250);

    TiXmlElement * cxn = new TiXmlElement( "Connection" );  
    root->LinkEndChild( cxn );  
    cxn->SetAttribute("ip", "192.168.0.1");
    cxn->SetDoubleAttribute("timeout", 123.456); // floating point attrib

    doc.SaveFile( "appsettings.xml" );  
} 


int main()
{
    write_app_settings_doc( );
  return 0;
}

      

just an example file. So when I compile this with:

g ++ example2.cpp

i the following error message appears:

/tmp/cc6npUsW.o: In function `write_app_settings_doc()':
example2.cpp:(.text+0x13): undefined reference to `TiXmlDocument::TiXmlDocument()'
example2.cpp:(.text+0x43): undefined reference to `TiXmlDeclaration::TiXmlDeclaration(char const*, char const*, char const*)'
example2.cpp:(.text+0x58): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x8f): undefined reference to `TiXmlElement::TiXmlElement(char const*)'
example2.cpp:(.text+0xa4): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x112): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x132): undefined reference to `TiXmlElement::TiXmlElement(char const*)'
example2.cpp:(.text+0x147): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x17e): undefined reference to `TiXmlElement::TiXmlElement(char const*)'
example2.cpp:(.text+0x1cb): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x1f4): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x214): undefined reference to `TiXmlElement::TiXmlElement(char const*)'
example2.cpp:(.text+0x261): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x28a): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x2aa): undefined reference to `TiXmlElement::TiXmlElement(char const*)'
example2.cpp:(.text+0x2bf): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x2f6): undefined reference to `TiXmlElement::TiXmlElement(char const*)'
example2.cpp:(.text+0x30b): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x33d): undefined reference to `TiXmlElement::SetAttribute(char const*, char const*)'
example2.cpp:(.text+0x358): undefined reference to `TiXmlElement::SetAttribute(char const*, int)'
example2.cpp:(.text+0x373): undefined reference to `TiXmlElement::SetAttribute(char const*, int)'
example2.cpp:(.text+0x38e): undefined reference to `TiXmlElement::SetAttribute(char const*, int)'
example2.cpp:(.text+0x3a9): undefined reference to `TiXmlElement::SetAttribute(char const*, int)'
example2.cpp:(.text+0x3c9): undefined reference to `TiXmlElement::TiXmlElement(char const*)'
example2.cpp:(.text+0x3de): undefined reference to `TiXmlNode::LinkEndChild(TiXmlNode*)'
example2.cpp:(.text+0x40d): undefined reference to `TiXmlElement::SetAttribute(char const*, char const*)'
example2.cpp:(.text+0x42a): undefined reference to `TiXmlElement::SetDoubleAttribute(char const*, double)'
example2.cpp:(.text+0x43d): undefined reference to `TiXmlDocument::SaveFile(char const*) const'
/tmp/cc6npUsW.o: In function `TiXmlString::operator=(char const*)':
example2.cpp:(.text._ZN11TiXmlStringaSEPKc[TiXmlString::operator=(char const*)]+0x23): undefined reference to `TiXmlString::assign(char const*, unsigned int)'
/tmp/cc6npUsW.o: In function `TiXmlString::quit()':
example2.cpp:(.text._ZN11TiXmlString4quitEv[TiXmlString::quit()]+0xc): undefined reference to `TiXmlString::nullrep_'
/tmp/cc6npUsW.o: In function `TiXmlComment::TiXmlComment()':
example2.cpp:(.text._ZN12TiXmlCommentC1Ev[TiXmlComment::TiXmlComment()]+0x15): undefined reference to `TiXmlNode::TiXmlNode(TiXmlNode::NodeType)'
example2.cpp:(.text._ZN12TiXmlCommentC1Ev[TiXmlComment::TiXmlComment()]+0x1e): undefined reference to `vtable for TiXmlComment'
/tmp/cc6npUsW.o: In function `TiXmlText::TiXmlText(char const*)':
example2.cpp:(.text._ZN9TiXmlTextC1EPKc[TiXmlText::TiXmlText(char const*)]+0x17): undefined reference to `TiXmlNode::TiXmlNode(TiXmlNode::NodeType)'
example2.cpp:(.text._ZN9TiXmlTextC1EPKc[TiXmlText::TiXmlText(char const*)]+0x20): undefined reference to `vtable for TiXmlText'
example2.cpp:(.text._ZN9TiXmlTextC1EPKc[TiXmlText::TiXmlText(char const*)]+0x4f): undefined reference to `TiXmlNode::~TiXmlNode()'
/tmp/cc6npUsW.o: In function `TiXmlDocument::~TiXmlDocument()':
example2.cpp:(.text._ZN13TiXmlDocumentD1Ev[TiXmlDocument::~TiXmlDocument()]+0xb): undefined reference to `vtable for TiXmlDocument'
example2.cpp:(.text._ZN13TiXmlDocumentD1Ev[TiXmlDocument::~TiXmlDocument()]+0x24): undefined reference to `TiXmlNode::~TiXmlNode()'
collect2: ld returned 1 exit status

      

I am mainly a Java developer and I have a lot of problems in C ++ for using external libraries. I don't know when to call. when to include. when should i do -I / myincludepath /

these files are in the same folder:

example.cpp tinyxml.h tinyxml.cpp tinystr.h tinystr.cpp

Can anyone help me?

+2


a source to share


5 answers


Try something like:



g++ example2.cpp tinyxml.cpp tinystr.cpp

      

+6


a source


First, none of them are libraries:

example.cpp tinyxml.h tinyxml.cpp tinystr.h tinystr.cpp

      

You need to find the tinyxml library. This location should be documented in the package's documentation, but let's say it's in / foo (it won't) and called libtinyxml.a (it probably won't). You can link it like this:



g++ example2.cpp -L/foo -ltinyxml

      

which adds / foo to the link path and looks for libtinyxml.a on it. Or you can just provide the full path to the library:

g++ example2.cpp /foo/libtinyxml.a

      

+6


a source


Why aren't you trying to learn about Make? It's actually very simple. Each line starting at column 0 is a target with its preconditions. The line starting with a tab describes one step in building a target. For instance:

example2: example2.cpp example2.h
    g++ example2.cpp tinyxml.cpp tinystr.cpp -oexample2

      

Or, if you have a library:

example2: example2.cpp example2.h
    g++ example2.cpp -Ltinyxml -oexample2

      

You don't actually need to specify the compiler you are using. Perhaps you are using one here and the other the other. This way you can use the corresponding make variable:

example2: example2.cpp example2.h
    $(CXX) example2.cpp -Ltinyxml -oexample2

      

What is it. Save this as a file called "Makefile" and to compile your project just type:

$ make

      

And it will compile it if needed. Further reading:

http://www.gnu.org/software/make/manual/html_node/index.html

+1


a source


You have to compile g ++ main.cpp

tinyxml.cpp

tinystr.cpp

tinyxmlparser.cpp

tinyxmlerror.cpp

and these files ( main.cpp

tinyxml.cpp

tinystr.cpp

tinyxmlparser.cpp

tinyxmlerror.cpp

AND tinyxml.h

tinystr.h

) must be under the same directory at compile time.

0


a source


I actually had this problem yesterday. You can try: g ++ * .cpp

0


a source







All Articles