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.
Works, siehe Bearbeiten – Irbis
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. –