boost.log遇到问题及解决办法

尝试将 Boost.log v2 集成到代码里,在win10+vs2017. 编译 x64版本。

c2672问题

问题

测试代码如下:

#include <boost/thread/mutex.hpp>
#include <boost/core/null_deleter.hpp>
#include <boost/log/common.hpp>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/attributes.hpp>
#include <boost/log/exceptions.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/sinks.hpp>
void test(){
   boost::log::sources::severity_logger<severity_level> slg1;
   slg1.open_record();               // this is ok
   slg1.open_record(trace);          // this line failed at next code
}

出错位置

template< typename BaseT, typename LevelT = int >
class basic_severity_logger : public BaseT
{
    template< typename ArgsT >
    record open_record_unlocked(ArgsT const& args)
    {
       // !!! 错在这里 !!! 
       //  severity_level::trace是个枚举值 ,不支持"operator[]"
        m_SeverityAttr.set_value(args[keywords::severity | m_DefaultSeverity]);   


        return base_type::open_record_unlocked(args);
    }
};

解决办法

boost::log::sources::severity_logger<boost::log::trivial::severity_level> slg1;
slg1.open_record();
BOOST_LOG_SEV(slg1, boost::log::trivial::trace) << "A regular message";
slg1.open_record(boost::log::keywords::severity=boost::log::trivial::trace);

open_record添加参数boost::log::keywords::severity=

no member named ‘open_record’ in severity_logger_mt<…>

问题

多线程logger测试

boost::log::sources::severity_logger_mt<severity_level> slg;
slg.open_record();                // 错误提示"no member named 'open_record' in severity_logger_mt<...>"
slg.open_record(severity_level::trace);           // 错误提示 "no member named 'open_record' in severity_logger_mt<...>"

解决办法

boost::log::sources::severity_logger_mt<boost::log::trivial::severity_level> slg;
slg.open_record();
slg.open_record(boost::log::keywords::severity=boost::log::trivial::trace);

还是给open_record添加参数boost::log::keywords::severity=

我只能说,元编程真得很考验人,给的错误提示不搭边啊。。。

undefined references

问题

链接时,出现类似如下的错误:

boosttest.o: In function `main':
boosttest.cc:(.text+0x44): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()'
boosttest.cc:(.text+0x9a): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()'
boosttest.cc:(.text+0x167): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()'
boosttest.cc:(.text+0x1bd): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()'
boosttest.cc:(.text+0x28a): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()'
b

解决办法

在include <boost/log/**>前

#define BOOST_LOG_DYN_LINK 1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值