2

我已经安装了 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;
}

但是问题是boost找不到需要的header:

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.

使用 "" 而不是 <> 也无济于事。我还尝试传递选项 cxxflags=-I/pass/to/this/header - 这也不起作用。仅当我使用标头的完整路径时-它才有效,但是它依赖于另一个找不到的头文件。

那么如何让boost安装寻找自己的包含目录呢?谢谢。

4

3 回答 3

6

您绝对需要让编译器知道在哪里可以找到 boost 标头。但是,您必须将路径传递到“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-I/opt/boost/1.47.0/include-isystem /opt/boost/1.47.0/include

是的,您忘记了cout全局命名空间中没有,您必须使用std::cout,或者说using std::cout;using namespace std;......不提#include <iostream>. 另外,在 C++ 中不需要return在函数中声明,默认情况下它会返回 0,除非你返回别的东西,所以你可以简单地删除该行。main

希望能帮助到你。祝你好运!

于 2011-09-07T21:16:11.747 回答
0

我不认为 xml_parser.hpp 存在于版本 1.41 中,而且我发现它在我的 debian wheezy 7.x 机器上的 1.49 中也是一个问题。我确实看到它在 boost 1.55 中,因此您只需获取最新版本的 boost 文件系统即可找到丢失的包。

于 2015-08-13T09:30:58.543 回答
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 and update。
  2. 或者,只是你没有安装libboost1.49-dev 来获取xml_parser.hpp。
于 2015-08-13T10:27:36.830 回答