2011-07-04 3 views
2

Я пытаюсь создать и запустить примеры учебников для Boost.log и получить ошибку компилятора, которая меня озадачила и может использовать некоторую помощь. Основные сведения; Я сделал сборку boost на OS X с включенным boost.log, но когда я пытаюсь скомпилировать любой из примеров учебника, я получаю перегруженную ошибку 'operator>>' из внутреннего файла буфера 'trivial.hpp'.Невозможно скомпилировать файл Boost.log на OS X

ошибки, как сообщается, в

log/utility/explicit_operator_bool.hpp

вот стек:

/usr/local/include/boost/log/utility/explicit_operator_bool.hpp:67:29: error: overloaded 'operator>>' must have at least one parameter of class or enumeration type [2] 
In file included from /usr/local/include/boost/log/attributes/attribute_name.hpp:27: 
In file included from /usr/local/include/boost/log/attributes/attribute_set.hpp:28: 
In file included from /usr/local/include/boost/log/sources/basic_logger.hpp:37: 
In file included from /usr/local/include/boost/log/sources/severity_logger.hpp:27: 
In file included from /usr/local/include/boost/log/trivial.hpp:25: 
In file included from /Volumes/Macintosh HD 2/code/Logging Tut 1/loggingTut1/loggingTut1/main.cpp:18: 
Overloaded 'operator>>' must have at least one parameter of class or enumeration type in /usr/local/include/boost/log/utility/explicit_operator_bool.hpp 

Если бы хороший взгляд вокруг, чтобы увидеть, если кто-то что-то подобное, и я ничего не нашел - так может кто-нибудь объяснить, что я пропустил или что может быть проблема?

Детали:

Я пытаюсь это на OS X (10.6.8) с помощью Xcode 4.0.2

Я скачал и построил 1_46_1 наддува версии и работает отлично с моим первичный проект на основе повышения (с использованием Boost Asio, повышения потоков и т. д.).

Boost.log не в основной сборке еще так что я скачал его с сайта SourceForge, как в этом вопросе: boost-log-how-to-get-it-and-how-to-build-it

Я скопировал boost/log каталог из загруженного филиала в boost_1_46_1/boost/log каталога, и скопировать в каталог libs/log в boost_1_46_1/libs/log

я удалил все вещи из наддува /usr/local/include/boost и от /usr/local/lib, а затем повторно построен с использованием:

./bootstrap.sh --with-libraries=all --prefix=/usr/local --includedir=/usr/local/include --libdir=/usr/local/lib

следуют

sudo ./bjam install > build.log

Я проверил выход на наличие ошибок и не выглядит чистой - ничего сообщается. У меня есть все библиотеки и заголовки boost под /usr/local. Я проверил свой проект Asio, и все это отлично работает с этой сборкой (без буфера). Я создал новый проект для учебников журналов, установил путь к библиотеке и путь включения и добавил lboost_log в параметры компоновщика.

Проблема возникает при попытке использовать программы учебник для журнала Boost - либо, как описано в подталкивания Log Docs here или в примере включены в файлы из SVN here

Пример из SVN выглядит следующим образом:

/* 
*   Copyright Andrey Semashev 2007 - 2011. 
* Distributed under the Boost Software License, Version 1.0. 
* (See accompanying file LICENSE_1_0.txt or copy at 
*   http://www.boost.org/LICENSE_1_0.txt) 
*/ 
/*! 
* \file main.cpp 
* \author Andrey Semashev 
* \date 07.11.2009 
* 
* \brief An example of trivial logging. 
*/ 

// #define BOOST_ALL_DYN_LINK 1 
// #define BOOST_LOG_DYN_LINK 1 

#include <boost/log/trivial.hpp> 
#include <boost/log/core.hpp> 
#include <boost/log/filters.hpp> 

int main(int argc, char* argv[]) 
{ 
    // Trivial logging: all log records are written into a file 
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message"; 
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message"; 
    BOOST_LOG_TRIVIAL(info) << "An informational severity message"; 
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message"; 
    BOOST_LOG_TRIVIAL(error) << "An error severity message"; 
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message"; 

    // Filtering may also be applied 
    using namespace boost::log; 

    core::get()->set_filter 
    (
     filters::attr<trivial::severity_level>("Severity") >= trivial::info 
    ); 

    // Now the first two lines will not pass the filter 
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message"; 
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message"; 
    BOOST_LOG_TRIVIAL(info) << "An informational severity message"; 
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message"; 
    BOOST_LOG_TRIVIAL(error) << "An error severity message"; 
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message"; 

    return 0; 
} 

Когда я строю код, я получаю две ошибки:

Семантический Выпуск перегруженные «оператор >>» должен иметь, по меньшей мере, одного параметра класса или е Тип нумерации Семантический Выпуск Перегруженный «оператор < <» должен иметь, по меньшей мере, одного параметра класса или перечисления типа

и об ошибке сообщается в файле explicit_operator_bool.hpp от повышающего Вход на этих линиях:

. 
. 
. 
} // namespace boost 

// These operators are not found through ADL 
template< typename T > void operator<< (T const&,  boost::log::aux::unspecified_bool_type); 
template< typename T > void operator>> (T const&, boost::log::aux::unspecified_bool_type); 

#define BOOST_LOG_EXPLICIT_OPERATOR_BOOL()\ 
. 
. 
. 

стек я получаю в Xcode выглядит следующим образом:

/usr/local/include/boost/log/utility/explicit_operator_bool.hpp:67:29: error: overloaded 'operator>>' must have at least one parameter of class or enumeration type [2] 
In file included from /usr/local/include/boost/log/attributes/attribute_name.hpp:27: 
In file included from /usr/local/include/boost/log/attributes/attribute_set.hpp:28: 
In file included from /usr/local/include/boost/log/sources/basic_logger.hpp:37: 
In file included from /usr/local/include/boost/log/sources/severity_logger.hpp:27: 
In file included from /usr/local/include/boost/log/trivial.hpp:25: 
In file included from /Volumes/Macintosh HD 2/code/Logging Tut 1/loggingTut1/loggingTut1/main.cpp:18: 
Overloaded 'operator>>' must have at least one parameter of class or enumeration type in /usr/local/include/boost/log/utility/explicit_operator_bool.hpp 
+0

boost :: log еще не поддерживается. Поэтому не удивительно, что он не компилируется на каждой мыслимой платформе и компиляторе. –

ответ

1

так вроде ответа на свой вопрос (как это могло бы помочь другим пользователям/Xcode OSX там).

Глядя на файл explicit_operator.bool.hpp, есть некоторый условный код там, что позволяет обойти проблемы шаблонов, установив:

#define BOOST_LOG_NO_UNSPECIFIED_BOOL 

учебники затем скомпилировать и запустить для меня.

Что я не уверен в этом, почему это необходимо или что может быть последним (обратите внимание, что, как и многие пользователи, мне интересен быстрый и эффективный способ получить легкую структуру ведения журнала и если мы должны тратить время на изучение внутренней работы каркаса, которая как бы сводит на нет точку ...)

Как говорится в комментарии, его еще не поддерживается библиотека, поэтому, возможно, ее несправедливо ожидать слишком многого на этом этапе.

Chris

Смежные вопросы