在删除所有不必要的代码之后,这是拒绝编译的准系统版本:
#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)`
等等。
我想我的搜索仍在继续。
答案 0 :(得分:1)
您必须将正确的选项传递给编译器,尤其是正确的包含路径。包装商通过一个程序为您提供了选项:xml++-config --cflags
将为您提供-Ipath_to_headers
,xml++-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依赖项。