boost/property_tree/xml_parser.hpp:没有那个文件或目录

Ale*_*lex 2 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;
}
Run Code Online (Sandbox Code Playgroud)

但是问题是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.
Run Code Online (Sandbox Code Playgroud)

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

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

小智 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语句,main默认情况下它将返回 0,除非您返回其他内容,因此您可以简单地删除该行。

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