2016-11-29 2 views
0

에서 호출 할 때 나는 libfoo 이름과 Win32 콘솔 응용 프로그램 exefoo에 의해 사용되는, 광산의 DLL에 boost::log의 출력 형식을 사용 작동하지 않습니다. 코드 libfoo의 주요 노출 대상에서부스트 :: 로그 형식은 DLL

// #include various boost log headers 

void __declspec(dllexport) add_boost_log_console_sink() 
{ 
    boost::log::add_common_attributes(); 

    boost::shared_ptr<text_sink> sink = boost::make_shared<text_sink>(); 

    sink->locked_backend()->add_stream(boost::shared_ptr<std::ostream>(&std::cout, boost::null_deleter())); 

    sink->set_formatter(xspectra::get_our_formatter(false)); 

    sink->set_filter(boost::log::trivial::severity >= boost::log::trivial::info 
     && 
     boost::log::expressions::has_attr(tag_attr) == false); 

    boost::log::core::get()->add_sink(sink); 
} 

boost::log::formatter __declspec(dllexport) get_our_formatter(bool bSubSeconds) 
{ 
    std::string sTimeStamp("%H:%M:%S"); 
    if (bSubSeconds) 
     sTimeStamp += ".%f"; 

    return boost::log::expressions::stream 
     //<< std::hex //To print the LineID in Hexadecimal format 
     << std::setw(6) << std::setfill('0') 
     << line_id 
     << "\t" 
     << boost::log::expressions::format_date_time<boost::posix_time::ptime>("TimeStamp", sTimeStamp) 
     << " <" << boost::log::trivial::severity 
     << "> \t" 
     /* 
        << boost::log::expressions::if_(boost::log::expressions::has_attr(tag_attr)) 
        [ 
         boost::log::expressions::stream << "[" << tag_attr << "]\t"   TAGS SUSPENDED 
        ] 
     */ 
     << boost::log::expressions::smessage; 
} 

이다, 나는 main()exefoo 내부 add_boost_log_console_sink(); 같은 전화를 -once- 호출했다.

포맷 출력을 생성했다libfoo 내부의 모든 후속 BOOST_LOG_TRIVIAL(severity) 전화 , exefoo 내부의 모든 유사한 전화가없는 동안.

코드의 모듈화를 위해, 나는 libfooexefoo에 의해 사용, liblog, 새로운 DLL로 이러한 기능을 움직였다. 이제 모든 로그는 이 아니며이 아닙니다.

DLL에서이 코드를로드하면 어떻게 든 효과가 나타나지 않는 것 같습니다. 나는 그것이 할 것이기를 바란다.

+0

Boost.Log와 동적으로 (즉, dll) 연결합니까? 'BOOST_LOG_DYN_LINK' 또는'BOOST_ALL_DYN_LINK'을 정의합니까? –

+0

나는 libboost_log-vc140-mt-1_60.lib와 정적으로 링크하고있다. 그러나 * liblog *와 * libfoo *는 dll입니다. 어쩌면 적어도 * liblog *를 정적 lib로 변경해야합니다. –

+0

그게 문제의 원인입니다. Boost.Log는 다른 모듈에서 사용하는 경우 공유 라이브러리로 빌드해야합니다. http://www.boost.org/doc/libs/1_62_0/libs/log/doc/html/log/installation/config.html –

답변

0

Andrey Semashev의 통찰력으로 liblog 구성 유형을 동적 라이브러리에서 정적 라이브러리로 전환했습니다. 이제 모든 것이 잘됩니다.

관련 문제