0

不要なコードをすべて取り除いた後、これはコンパイルを拒否するベアボーン バージョンです。

#include <iostream>
#include <libxml++/libxml++.h>

using namespace std;

int main (int argc, char *argv[]) {
    cout << "Hello, World!" << endl;
    return 0;
}

Fedora 16 の最新バージョンを使用しています。当初、コンパイラは libml++/libxml++.h さえも見つけることができませんでした。これは、Fedora の yum がこれらのファイルを /usr/include/libxml++-2.6/libxml++ に配置するためです。そこで、シンボリックリンク /usr/include/libxml++ を /usr/include/libxml++-2.6/libxml++ に作成することで、この問題を回避しました。これにより、コンパイラが libxml++.h を見つけられないという不平を言うのを止めましたが、libxml++.h には次の行があります。

#include <ustring.h>

これもコンパイラーが見つけられませんでした。そこでもう一度、/usr/include/glibmm から /usr/include/glibmm-2.4/glibmm へのシンボリック リンクを作成しました。これは、ustring.h が実際に存在する場所です。

これで、コンパイラは ustring.h について不平を言うのをやめましたが、ustring.h の最初の (実際の) 行は

#include <glibmmconfig.h>

コンパイラが見つけられないもの。

glibmmconfig.h の実際の場所は /usr/lib64/glibmm-2.4/include です。しかし、ustring.h を変更したくありません。

シンボリックリンクなどを常に作成しなくても問題を解決する方法はありますか?

よろしくお願いします。

編集

次のコンパイラ オプションを使用して、問題を回避できました。

`pkg-config --cflags --libs glibmm-2.4 libxml++-2.6`

道を示してくれたjpalecekに感謝しますが、問題を回避できるようになるまで、もう少し探す必要がありました。

しかし、これらのコンパイラ オプションは上記の単純なプログラムをコンパイルしますが、libxml++ チュートリアル ページのチュートリアルはコンパイルできません。

#include <iostream>
#include <libxml++/libxml++.h>
#include <string.h>

using namespace std;

int main (int argc, char *argv[]) {
    string FilePath = "SampleXMLDocument.xml";
    try {
        xmlpp::DomParser Parser;
        Parser.set_substitute_entities ();
        Parser.parse_file (FilePath);
        cout << "Successfully parsed XML file" << endl;
    } catch (const exception& excp) {
        cout << "Exception caught:  " << excp.what () << endl;
    }
    return 0;
} // End main ()

今回は、次のようなエラーが大量に発生します。

undefined reference to `xmlpp::DomParser::DomParser()`
undefined reference to `xmlpp::Parser::set_substitute_entities(bool)`

等々。

私の探求は続くと思います。

4

3 に答える 3

1

正しいオプション、特に正しいインクルード パスをコンパイラに渡す必要があります。パッケージャーは、オプションxml++-config --cflagsを提供するプログラムによってそれを可能にしました。-Ipath_to_headersxml++-config --libs-lto_link

于 2012-04-19T22:26:45.467 に答える