3

+こんにちは...私は初心者です...そしてc++に外部ライブラリを含める方法がわかりません。これはすごい難しいです。

TinyXMLを使いたい。だから私はこれを作りました:

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;
}

単なるサンプルファイル。だから..私がこれをコンパイルするとき:

g ++ example2.cpp

次のエラーメッセージが表示されます:

/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

私は主にJava開発者であり、外部ライブラリを使用するにはC++で多くの問題があります。リンクするタイミングがわかりません。いつ含めるか。-I /myincludepath/を作成する必要がある場合

これらのファイルは同じフォルダにあります:

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

誰かが私を助けることができますか?

4

5 に答える 5

6

まず、これらはいずれもライブラリではありません。

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

tinyxmlライブラリを見つける必要があります。この場所はパッケージのドキュメントに記載されているはずですが、/ fooにあり(そうではない)、libtinyxml.aと呼ばれている(おそらくそうではない)としましょう。次のようにリンクできます。

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

これは/fooをリンクパスに追加し、その上でlibtinyxml.aを探します。または、ライブラリへの完全なパスを指定することもできます。

g++ example2.cpp /foo/libtinyxml.a
于 2010-04-26T16:22:19.230 に答える
6

次のようなものを試してください:

g++ example2.cpp tinyxml.cpp tinystr.cpp
于 2010-04-26T16:16:36.690 に答える
1

Makeについて学んでみませんか?実はとてもシンプルです。列0で始まる各行は、前提条件を備えた目標です。タブで始まる行は、目標を構築するための1つのステップを示しています。例えば:

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

または、ライブラリがある場合:

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

実際には、使用しているコンパイラを指定する必要はありません。ここで1つを使用していて、別のプラットフォームで別の1つを使用している可能性があります。したがって、適切なmakeの変数を使用できます。

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

それでおしまい。これを「Makefile」という名前のファイルとして保存し、プロジェクトをコンパイルするには、次のように入力します。

$ make

そして、必要に応じてコンパイルします。参考文献:

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

于 2010-04-26T17:08:18.060 に答える
0

g++をコンパイルする必要がありますmain.cpp tinyxml.cpp tinystr.cpp tinyxmlparser.cpp tinyxmlerror.cpp

コンパイル中は、これらのファイル(main.cpp tinyxml.cpp tinystr.cpp tinyxmlparser.cpp tinyxmlerror.cppAND tinyxml.h tinystr.h)が1つのディレクトリの下にある必要があります。

于 2013-10-22T17:56:34.553 に答える
0

実は昨日この問題が発生しました。:g ++*.cppを試すことができます

于 2019-07-05T11:43:47.177 に答える