Не могу скомпилировать против Boost.log на OS X - PullRequest
2 голосов
/ 04 июля 2011

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

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

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

Хорошо огляделся вокруг, чтобы увидеть, есть ли у кого-то еще что-то вродеэто и я ничего не нашел - так может кто-нибудь объяснить, что я пропустил или в чем может быть проблема?

Подробности:

Я пытаюсь это на ОСX (10.6.8) с использованием Xcode 4.0.2

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

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

Я скопировал каталог boost/log из загруженной ветви в каталог boost_1_46_1/boost/log и скопировал libs/log diв 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

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

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

Пример из 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;
}

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

Перегруженная семантическая проблема 'operator >>' должен иметь хотя бы один параметр класса или типа перечисления Перегруженная семантическая проблема 'operator <<' должен иметь хотя бы однупараметр класса или типа перечисления </p>

, и ошибка сообщается в файле manif_operator_bool.hpp из Boost Log в следующих строках:

.
.
.
} // 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

1 Ответ

1 голос
/ 05 июля 2011

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

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

#define BOOST_LOG_NO_UNSPECIFIED_BOOL

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

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

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

Chris

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...