无法编译使用libxml ++的简单程序,因为找不到glibmmconfig.h

时间:2012-04-19 22:18:34

标签: c++ libxml2

在删除所有不必要的代码之后,这是拒绝编译的准系统版本:

#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++ tutorial page上的教程:

#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)`

等等。

我想我的搜索仍在继续。

3 个答案:

答案 0 :(得分:1)

您必须将正确的选项传递给编译器,尤其是正确的包含路径。包装商通过一个程序为您提供了选项:xml++-config --cflags将为您提供-Ipath_to_headersxml++-config --libs将为您提供-lto_link

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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