2011-09-07 171 views
1

我已經安裝了boost_1_41_0並嘗試按照xml解析的一些教程:boost/property_tree/xml_parser.hpp:沒有這樣的文件或目錄

#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. 

使用「」而不是<>也沒有幫助。我也嘗試將選項cxxflags = -I/pass /傳遞給/ this/header - 這也不行。只有當我使用標題的完整路徑時 - 它纔有效,但它依賴於另一個無法找到的頭文件。

那麼如何讓boost安裝尋找自己的include目錄呢?謝謝。

+0

對我來說就像一個不正確安裝的g ++ 4.6 ... –

回答

4

您肯定需要讓編譯器知道在哪裏可以找到boost報頭。但是,您必須將路徑傳遞到「boost」目錄所在的目錄,而不是該包含文件所在的目錄。所以,舉例來說,如果您的升級頭文件位於/opt/boost/1.47.0/include且您的文件位於/opt/boost/1.47.0/include/boost/property_tree/ptree.hpp,則必須使用-I-I/opt/boost/1.47.0/include/opt/boost/1.47.0/include傳遞給編譯器。或者甚至更好,使用-isystem /opt/boost/1.47.0/include,這樣你就不會從這些標題中得到警告。

,是的,你忘了,有在全局命名空間沒有cout,你必須使用std::cout,或者說using std::cout;using namespace std; ...不提#include <iostream>。另外,main函數中的return語句在C++中不是必需的,它將默認返回0,除非您返回其他內容,因此您可以簡單地刪除該行。

希望它有幫助。祝你好運!

0

我不認爲在版本1.41中存在xml_parser.hpp,而且我發現它也是1.49版本中的一個問題,它在我的debian wheezy 7.x機器上。我確實看到它在1.55版本中,所以它只是你獲得最新版本的boost文件系統來找到丟失的軟件包的問題。

+0

在我的機器上發現了一個可怕的解決方案。 boost 1.49在boost1.49-dev中包含xml_parser.hpp,如libboost1.49-dev所示:/usr/include/boost/property_tree/xml_parser.hpp –

0

我在我的機器上發現了一個可怕的解決方案。提高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清理和更新。
  2. 或者,您剛剛沒有安裝libboost1.49-dev來獲取xml_parser.hpp。
相關問題