Boost Log to File не работает

Я не могу понять, почему этот пример кода работает неправильно. Мой компилятор говорит, что вызываемые функции не являются членами объявленного пространства имен. Это пример кода для журнала Boost, так почему он не работает? Что мне нужно сделать?

Я уже определил BOOST_LOG_DYN_LINK, и у меня есть все заголовки, которые нужно включить. Дополнительно был установлен boost через yum из репозиториев Fedora, согласно yum, версия boost 1.55.0.

Пример: http://www.boost.org/doc/libs/1_55_0/libs/log/example/doc/tutorial_file.cpp

Ошибки

main.cpp:33:5: error: ‘add_file_log’ is not a member of ‘logging’
     logging::add_file_log(
     ^
main.cpp:34:10: error: ‘file_name’ is not a member of ‘keywords’
          keywords::file_name = "sample_%N.log",                                        /*< file name pattern >*/
          ^
main.cpp:35:10: error: ‘rotation_size’ is not a member of ‘keywords’
          keywords::rotation_size = 10 * 1024 * 1024,                                   /*< rotate files every 10 MiB... >*/
          ^
main.cpp:36:10: error: ‘time_based_rotation’ is not a member of ‘keywords’
          keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0), /*< ...or at midnight >*/
          ^
main.cpp:36:49: error: ‘sinks::file’ has not been declared
          keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0), /*< ...or at midnight >*/

Код

#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/text_file_backend.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>

namespace logging = boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;

void init()
{
    logging::add_file_log
    (
        keywords::file_name = "sample_%N.log",
        keywords::rotation_size = 10 * 1024 * 1024,
        keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
        keywords::format = "[%TimeStamp%]: %Message%"
    );

    logging::core::get()->set_filter
    (
        logging::trivial::severity >= logging::trivial::info
    );
}

Сделать вызов

g++ -c -DBOOST_LOG_DYN_LINK -o main.cpp.o main.cpp

Флаги компоновщика: -lboost_program_options -lboost_log -lboost_filesystem -lboost_system -lboost_thread -lpthread

Подробный журнал: https://gist.github.com/HSchmale16/d4dd5656a47ce82c63b2


person HSchmale    schedule 02.05.2015    source источник
comment
компилятор/сделать вызов?   -  person Tasos Vogiatzoglou    schedule 03.05.2015
comment
@TasosVogiatzoglou Добавлены флаги компоновщика и команда компилятора для сбойного файла.   -  person HSchmale    schedule 03.05.2015
comment
странный. Можете ли вы показать отладочный/подробный вывод gcc? Может быть, включаемые каталоги не включены?   -  person Tasos Vogiatzoglou    schedule 03.05.2015
comment
@TasosVogiatzoglou Я только что добавил ссылку в подробный журнал. Хотя я уже проверил, включены ли включаемые каталоги.   -  person HSchmale    schedule 03.05.2015
comment
Какую версию Boost вы используете?   -  person zmbq    schedule 03.05.2015
comment
@zmbq Boost Version 1.55.0 Я также добавлю это к вопросу   -  person HSchmale    schedule 03.05.2015
comment
@HSchmale Глупый вопрос, но вы установили boost-devel?   -  person Tasos Vogiatzoglou    schedule 03.05.2015
comment
@TasosVogiatzoglou Да, видел. Еще до публикации я запустил yum install boost*, а когда это не удалось, я запустил ту же команду, что и для переустановки. Сборка все равно не удалась.   -  person HSchmale    schedule 03.05.2015
comment
@HSchmale Попробуйте выполнить $ ls /usr/include/boost. Вы возвращаете результаты?   -  person Tasos Vogiatzoglou    schedule 03.05.2015
comment
@TasosVogiatzoglou Да, журнал находится в каталоге   -  person HSchmale    schedule 03.05.2015
comment
@HSchmale Попробуйте --std=c++11 в вашем вызове gcc   -  person Tasos Vogiatzoglou    schedule 03.05.2015
comment
@TasosVogiatzoglou Все еще терпит неудачу с -std=c++11   -  person HSchmale    schedule 03.05.2015
comment
Давайте продолжим обсуждение в чате.   -  person Tasos Vogiatzoglou    schedule 03.05.2015


Ответы (2)


Проверьте ваши файлы заголовков на предмет отсутствия чего-либо, а также включите -lboost_log_setup в вызов вашего компилятора/компоновщика.

person Tasos Vogiatzoglou    schedule 03.05.2015

Я могу скомпилировать это без ошибок, без изменений в коде. Проверьте свой источник boost::log, чтобы убедиться, что у вас есть то, что вы ожидаете. Я предполагаю, что ваши файлы повышения были повреждены. Поверьте, эта ошибка указывает на то, что функция не найдена там, где ее ищет компилятор.

person Algonaut    schedule 03.05.2015
comment
Я проверил на коррупцию, и этого не произошло. Я загрузил заголовки boost непосредственно из репозиториев Fedora через yum и переустановил все boost, и это все еще происходит. - person HSchmale; 03.05.2015
comment
Попробуйте проверить, действительно ли включенный код предназначен для включения. Вы можете запустить препроцессор кода, передав -E вместо -c в командной строке компилятора, а затем посмотреть, действительно ли предварительно обработанный вывод содержит символы, на которые ссылаются. - person Andrey Semashev; 04.05.2015