boost / property_tree / xml_parser.hpp:没有这样的文件或目录

时间:2011-09-07 20:51:03

标签: c++ gcc boost include-path boost-propertytree

我已安装boost_1_41_0并尝试按照xml解析的一些教程进行操作:

#include <boost/property_tree/ptree.hpp>
int main(){
  using boost::property_tree::ptree;
  ptree pt;
  cout<<"Here is an XML test!\n";
  return 0;
}

但问题是提升无法找到所需的标题:

gcc.compile.c++ bin/gcc-4.6.0/debug/main.o
main.cpp:1:46: fatal error: boost/property_tree/ptree.hpp: No such file or  directory
compilation terminated.

使用“”代替&lt;&gt;也没有帮助。我也尝试将选项cxxflags = -I / pass /传递给/ this / header - 这也不起作用。只有当我使用标题的完整路径时 - 它才有效,但它依赖于另一个无法找到的头文件。

那么如何让boost安装查找自己的include目录呢?感谢。

3 个答案:

答案 0 :(得分:4)

你肯定需要让编译器知道在哪里找到boost标头。但是,您必须将路径传递到“boost”目录所在的目录,而不是该包含文件所在的目录。因此,例如,如果您的提升标头位于/opt/boost/1.47.0/include且您的文件位于/opt/boost/1.47.0/include/boost/property_tree/ptree.hpp,那么您必须使用/opt/boost/1.47.0/include-I传递给编译器:{{1 }}。或者甚至更好,使用-I/opt/boost/1.47.0/include,这样就不会从这些标题中收到警告。

是的,您忘了全局命名空间中没有-isystem /opt/boost/1.47.0/include,您必须使用cout,或者说std::coutusing std::cout; ...不要提及using namespace std;。另外,C ++中不需要#include <iostream>函数中的return语句,默认情况下它将返回0,除非您返回其他内容,因此您只需删除该行。

希望它有所帮助。祝你好运!

答案 1 :(得分:0)

我不认为版本1.41中存在xml_parser.hpp,我发现它在我的debian wheezy 7.x机器上的1.49也是一个问题。我确实看到它在boost 1.55中,所以它只是你得到最新版本的boost文件系统来找到丢失的包。

答案 2 :(得分:0)

我在我的机器上发现了一个可怕的解决方案。 boost 1.49确实包含boost1.49-dev中的xml_parser.hpp,如图所示     libboost1.49-dev:/usr/include/boost/property_tree/xml_parser.hpp

然而,由于我的机器上安装了spotify存储库导致的奇怪错误,无法在我的机器上访问或下载它。更奇怪的是,安全修复程序每天都会进入并正确安装。当我清理sources.list文件并运行apt-get clean然后apt-get update时,我发现所有丢失的软件包包括libboost1.49-dev都回来了,然后可以安装。然后,这完全解决了问题。所以你有两个问题之一:

无论哪种,

  1. 您的系统略有损坏。要测试此断言是否正确,请运行apt-get clean,然后运行apt-get update。如果您获得了大量存储库错误,那么您就知道如何解决问题。删除有问题的存储库并重新运行apt-get clean并更新。
  2. 或者,就是你没有安装libboost1.49-dev来获取xml_parser.hpp。