boost / property_tree / xml_parser.hpp: нет такого файла или каталога - PullRequest
1 голос
/ 08 сентября 2011

Я установил 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.

Использование "" вместо <> также не помогает. Я также попытался передать опцию cxxflags = -I / pass / to / this / header - это тоже не работает. Только если я использую полный путь к заголовку - он работает, но это зависит от другого файла заголовка, который он не может найти.

Итак, как сделать так, чтобы при установке буста выглядели его собственные каталоги включения? Спасибо.

Ответы [ 3 ]

4 голосов
/ 08 сентября 2011

Вам определенно нужно сообщить компилятору, где искать заголовки надстроек. Однако вы должны передать путь к каталогу, в котором находится каталог 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>. Кроме того, оператор return в функции main не требуется в C ++, по умолчанию он возвращает 0, если вы не возвращаете что-то еще, поэтому вы можете просто удалить эту строку.

Надеюсь, это поможет. Удачи!

0 голосов
/ 13 августа 2015

Я обнаружил страшное решение на моей машине.Boost 1.49 содержит xml_parser.hpp в boost1.49-dev, как показано в 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.
0 голосов
/ 13 августа 2015

Я не думаю, что xml_parser.hpp существует в версии 1.41, и я вижу, что это также проблема в 1.49, которая находится на моем компьютере с Debian Wheezy 7.x. Я вижу, что это Boost 1.55, так что вы просто получаете последнюю версию файловой системы boost, чтобы найти недостающий пакет.

...