2012-02-28 9 views
0

私はhtmlcxxを使ってウェブページを解析しようとしています。問題は、この例はコンパイルできないことです。htmlcxx0.84コンパイルエラー

私はg++ webscrsp.cppを実行したときに私はこれを取得しています:

 
/tmp/ccHiUM6o.o: In function `main': 
webscrsp.cpp:(.text+0x86): undefined reference to `htmlcxx::HTML::ParserSax::parse(std::basic_string, std::allocator > const&)' 
webscrsp.cpp:(.text+0xb8): undefined reference to `htmlcxx::HTML::operator >&, tree > > const&)' 
/tmp/ccHiUM6o.o: In function `htmlcxx::HTML::ParserDom::ParserDom()': 
webscrsp.cpp:(.text._ZN7htmlcxx4HTML9ParserDomC1Ev[htmlcxx::HTML::ParserDom::ParserDom()]+0x22): undefined reference to `vtable for htmlcxx::HTML::ParserDom' 
/tmp/ccHiUM6o.o: In function `htmlcxx::HTML::ParserDom::~ParserDom()': 
webscrsp.cpp:(.text._ZN7htmlcxx4HTML9ParserDomD1Ev[htmlcxx::HTML::ParserDom::~ParserDom()]+0x16): undefined reference to `vtable for htmlcxx::HTML::ParserDom' 
collect2: ld returned 1 exit status 

私のコードは

#include <string> 
    #include <iostream> 
    #include <sstream> 
    #include </home/lubhavan/htmlcxx-0.84/html/ParserDom.h> 
    using namespace std; 
    using namespace htmlcxx; 

    int main() 
    { 
     string html ="<html > <head> <title > hi iam titile </title> </head> <body> <p>    what can i do </p> </body> </html>"; 
    HTML::ParserDom parser; 
    tree<HTML::Node> dom = parser.parseTree(html) ; 
    cout << dom <<endl; 

    cout << endl; 
    return 0; 
    } 

で、私は非常にすぐにそれをしなければならないように私を助けてください。私はあなたのコマンドライン全体が

g++ webscrsp.cpp 

ある場合は、とリンクしていないので、あなたは、リンカエラーが発生します。..事前に

おかげで...

+0

[dev-cppでhtmlcxxを使用しているときのリンクエラー](http://stackoverflow.com/questions/7300828/linking-error-while-using-htmlcxx-with-dev-cpp) –

答えて

1

障害を取得することができません実際のコードを含むライブラリ。 /path/to/libraryXXXname_of_libraryあるlibXXX.aという名前のファイルへのパスで、上記のコマンドラインの例では

g++ webscrsp.cpp -L/path/to/library -Wl,-rpath=/path/to/library -lname_of_library 

あなたはこのような何かをしなければなりません。

あなたの場合、/home/lubhavan/htmlcxx-0.84/のどこかで、libで始まり、.aで終わるファイルを見つける必要があります。 /path/to/libraryは、そのファイルがあるパスです。 name_of_libraryは、先頭にlibと末尾に.aがないファイルの名前です。

+0

ありません.a拡張子を持つファイルですが、libで始まり、.laまたは.so拡張子を持つsomefilesがあります。 – puneet

+0

@puneet '.so'ファイルもライブラリですが、アプリケーションに動的にリンクされています。同様に動作し、 '-L'を使用してライブラリのパスを設定し、' -l'(小文字のL)を使用してリンクするライブラリの名前を指定します( 'lib'と' .so'なし)。 –

+0

@ Joahhim Pileborg多くのことがうまくいきました:) しかし、私はこのライブラリパスを追加する必要がありますか?libnameは毎回私がtehプログラムを実行する必要があります – puneet