2017-02-27 6 views
1

jamfileの代わりに自分のcmakeファイルを使ってブーストの例rotating_file(ブースト1.63)を構築しました。プログラムはまた、次の行が含まブーストログ - グローバルロガー使用時の未定義参照

#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(); 

:ここ

#define BOOST_ALL_DYN_LINK 

は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") 

このライン:

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

それから私は、次のような変形を追加しています生成:

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

どうしたのですか?

編集

私はこの方法で、シンクや他の属性を追加します。

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 >()); 

ので、私はちょうど追加BOOST_LOG_GLOBAL_LOGGER_INITの終わり:

src::logger logger; 
return logger; 

それは動作します。

答えて

2

BOOST_LOG_GLOBAL_LOGGER_INITが必要です。私はこれを持っているソースファイルで

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

::私はBOOST_LOG_GLOBAL_LOGGER_INITをコメントアウトすると、あなたがそうであるように

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; 
} 

が、私は同じエラーを取得する一つのプロジェクトで、私は、ヘッダーに次のように持っています。 BOOST_LOG_GLOBAL_LOGGER_INITは、私たちが必要とする定義を提供してくれます。

+0

作品については、 – Irbis

+0

をご覧ください。ドキュメント(http://www.boost.org/doc/libs/1_63_0/libs/log/doc/html/log/detailed/sources.html#log)に記載されています。 .detailed.sources.global_storage)には、ロガーの初期化を定義するいくつかのマクロがあります。編集で判断すると、 'BOOST_LOG_GLOBAL_LOGGER_DEFAULT'を使うことができます。 –