2015-05-02 2 views
2

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

Я уже определил BOOST_LOG_DYN_LINK, и у меня есть все включенные заголовки, которые должны быть включены. Кроме того, boost был установлен через yum из репозитория fedora, согласно yum, ускоряющая версия - 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

Verbose Log: https://gist.github.com/HSchmale16/d4dd5656a47ce82c63b2

+0

компилятор/сделать вызов? –

+0

@TasosVogiatzoglou Добавлены флаги компоновщика и команда компилятора для файла с отказами. – HSchmale

+0

странно. Можете ли вы показать отладочный/подробный вывод gcc? Может быть, включенные каталоги не включены? –

ответ

1

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

0

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

+0

Я проверил на наличие коррупции, и этого не произошло. Я загрузил заголовки форматирования непосредственно из репозитория fedora через 'yum', и я переустановил весь импульс, и он все равно встречается. – HSchmale

+0

Попробуйте посмотреть, действительно ли включенный код является тем, что предполагается включить. Вы можете запустить препроцессор в коде, передав -E вместо -c в командной строке компилятора, а затем посмотрите, действительно ли предварительно обработанный вывод содержит ссылочные символы. –