剥离所有不必要的代码后,这是拒绝编译的准系统版本:
#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)`
等等。
我想我的搜索还在继续。