开发者

Using TinyXML ( linking libraries ? in c++ )

开发者 https://www.devze.com 2022-12-28 09:59 出处:网络
+Hi... i am a newbie ... and i don\'t know how to include external libraries in c++. This is sooo hard.

+Hi... i am a newbie ... and i don't know how to include external libraries in c++. This is sooo hard.

I want to use TinyXML. so i made 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 get following error message:

/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 mostly a java developer and i have a lot of problems in c++ to use external libraries. I dont know when to link . when to include. when i have to make -I/myincludepath/

开发者_开发百科

these files are in the same folder :

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

Can somebody help me ?


Try something like:

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


Firstly, none of these is a library:

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

You need to locate the tinyxml library. This location should be described in the package's documentation, but lets say it's in /foo (it won't be) and is called libtinyxml.a (it probably wont be). You could 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 simply provide the complete path to the library:

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


Why don't you try to learn about Make? It is actually very simple. Each line beginning at column 0 is an objective with its prerequisites. A line beginning with a tab is describes one step to build the objective. For example:

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

Or, if you have the library:

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

Actually, you don't have to specify the compiler you're using. Maybe you're using one here, and another different one in another platform. So you can use the appropriate make's variable:

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

That's it. Save this as a file with name "Makefile" and, in order 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


You should 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 one directory while you are compiling.


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

0

精彩评论

暂无评论...
验证码 换一张
取 消