【问题标题】:C++ boost logging compile error (linux)C ++ boost日志记录编译错误(linux)
【发布时间】:2026-01-27 23:50:01
【问题描述】:

谁能告诉我我做错了什么?

在控制台上运行它会产生以下错误:

# c++ -I /var/local/boost_1_46_1/log.cpp -o log -lboost-log
log.cpp:在函数“void init()”中: log.cpp:11:错误:“boost::logging”尚未声明 log.cpp:13: 错误: âboost::fltâ 没有被声明 log.cpp:13: 错误: 'logging' 没有被声明 log.cpp:13: 错误: 'logging' 没有被声明

我也尝试过从 stage 和 /usr/local/lib 目录显式链接库。

我的 log.cpp:

#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/filters.hpp>

using namespace std;

void init()
{
    boost::logging::core::get()->set_filter
    (
        boost::flt::attr< boost::logging::trivial::severity_level >("Severity") >= boost::logging::trivial::info
    );

}

}

int main(int, char*[]) {
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
    BOOST_LOG_TRIVIAL(info) << "An informational severity message";
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
    BOOST_LOG_TRIVIAL(error) << "An error severity message";
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
}

如果我省略 void init() 函数,这段代码将编译...

【问题讨论】:

    标签: c++ linux boost


    【解决方案1】:

    您需要以下命名空间重新定义才能使用教程:

    namespace logging = boost::log;
    namespace sinks = boost::log::sinks;
    namespace src = boost::log::sources;
    namespace fmt = boost::log::formatters;
    namespace flt = boost::log::filters;
    namespace attrs = boost::log::attributes;
    namespace keywords = boost::log::keywords;
    

    http://boost-log.sourceforge.net/libs/log/doc/html/log/how_to_read.html

    【讨论】:

    • 我仍然遇到错误,我会用我所做的更改更新原始帖子。
    • 我的错,教程重新定义了命名空间。我将编辑我的答案。
    【解决方案2】:

    你确定你的#include 是对的吗?试试#include &lt;boost/log/core/core.hpp&gt;

    【讨论】:

    • 是的,有 2 个 core.hpps,一个在 boost/log 中,一个在 boost/log/core 中。我上面包含的一个 core.hpp 包括另一个,如下所示:#include #include