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 回答
0

好吧,我不熟悉 Fedora 16,但我认为您遇到了一些链接错误,因为找不到 libxml++。1. 检查 /usr/lib/ 和 libxml++.so(可能是这个名称...)可能找到的其他可能的目录。确保 /etc/ld.so.conf 包含此路径,以便链接可以找到它。如果没有,请尝试添加 libxml++ 的位置并运行“ldconfig”进行更新。2.用g++检查-l选项的使用是否正确...

于 2012-04-20T01:51:59.597 回答
0

根据 libxml++-XX 编译库的最简单方法是使用 pkg-config:

c++ -std=c++11 -Wall $(pkg-config --cflags --libs libxml++-2.6) -o test main.cc

仅指定 libxml++-2.6 也将解决 glibmm-2.4 依赖项。

于 2014-06-25T15:20:17.523 回答