2017-02-27 2 views
1

Ich habe erfolgreich ein Boost-Beispiel rotierende_Datei (Boost 1.63) mit meiner eigenen cmake-Datei anstelle von Jamfile gebaut. Dann habe ich folgende Änderung hinzu:Boost Log - undefined Referenz bei Verwendung eines globalen Loggers

#include <boost/log/sources/global_logger_storage.hpp> 
... 
//before main 
BOOST_LOG_GLOBAL_LOGGER(my_logger, src::logger) 
... 
//src::logger lg; 
src::logger& lg = my_logger::get(); 

Ein Programm auch diese Zeile enthält:

#define BOOST_ALL_DYN_LINK 

Hier sind Cmake Libs:

target_link_libraries(test "libboost_log.so" 
          "libboost_log_setup.so" 
          "libboost_date_time.so" 
          "libboost_filesystem.so" 
          "libboost_system.so" 
          "libboost_thread.so") 

Diese Zeile:

src::logger& lg = my_logger::get(); 

generiert:

global_logger_storage.hpp:154: error: undefined reference to `my_logger::construct_logger()' 

Was ist los?

bearbeiten

ich hinzufügen, Waschbecken und andere Attribute auf diese Weise:

logging::core::get()->add_sink(sink); 
logging::core::get()->add_global_attribute("TimeStamp", attrs::local_clock()); 
logging::core::get()->add_global_attribute("RecordID", attrs::counter< unsigned int >()); 

so am Ende des BOOST_LOG_GLOBAL_LOGGER_INIT ich nur hinzufügen:

src::logger logger; 
return logger; 

Es funktioniert.

Antwort

2

Sie benötigen einen Anruf an BOOST_LOG_GLOBAL_LOGGER_INIT. In einem Projekt habe ich folgendes in einem Header:

// register a global logger 
BOOST_LOG_GLOBAL_LOGGER(logger, boost::log::sources::severity_logger_mt<boost::log::trivial::severity_level>) 

in der Quelldatei ich diese:

BOOST_LOG_GLOBAL_LOGGER_INIT(logger, src::severity_logger_mt) { 
    src::severity_logger_mt<boost::log::trivial::severity_level> logger; 

    // add attributes 
    logger.add_attribute("LineID", attrs::counter<unsigned int>(1)); // lines are sequentially numbered 
    logger.add_attribute("TimeStamp", attrs::local_clock());    // each log line gets a timestamp 

    return logger; 
} 

Als ich die BOOST_LOG_GLOBAL_LOGGER_INIT Kommentar aus, bekomme ich die gleichen Fehler wie Sie. Meine Befugnisse der Deduktion sagen mir, dass BOOST_LOG_GLOBAL_LOGGER_INIT die Definition liefert, die Sie (wir) brauchen.

+0

Works, siehe Bearbeiten – Irbis

+0

Wie Sie in der Dokumentation sehen können (http://www.boost.org/doc/libs/1_63_0/libs/log/doc/html/log/detailed/sources.html#log .detailed.sources.global_storage), gibt es einige andere Makros, um die Logger-Initialisierung zu definieren. Nach der Bearbeitung können Sie 'BOOST_LOG_GLOBAL_LOGGER_DEFAULT' verwenden. –

Verwandte Themen