什么是提升日志,如何获取它以及如何构建它

What is boost log, how to get it and how to build it

本文关键字:何构建 构建 获取 日志 何获取 什么      更新时间:2023-10-16

所以我听到了关于提升日志的好消息。这声称它的存在:

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

这是教程:

http://boost-log.sourceforge.net/libs/log/doc/html/log/tutorial.html#log.tutorial.trivial

但是,提升日志不是提升的一部分。因此不在常规提升分支中。

可以从这里单独下载提升日志:

http://sourceforge.net/projects/boost-log/

我可能只是太缺乏经验,但我发现安装说明很差。尽管如此,在将文件夹 boost 和 lib 下载并复制到 boost 文件夹中后,我可以运行 bootstrap 和 bjam。这将失败,并出现与 Boost.Filesystem 版本相关的错误,类似于此处提到的错误:

http://boost.2283326.n4.nabble.com/Boost-Log-compilation-on-msvc-2010-fail-td3488502.html

Andrew Semashev(在上面的链接中)的建议是"请使用Boost.Log v2(来自SVN主干)。

查看 https://boost-log.svn.sourceforge.net/svnroot/boost-log,我只能看到版本1。

查看 http://svn.boost.org/svn/boost/sandbox/,我可以找到John Torjo的boost logging v2。但是,仅从语法来看,这可能不是Andrew Semashev所说的提升日志v2。

看到我已经花了很多时间在这上面,我想我会得到一些帮助,也许其他人可能会从这篇文章和答案中受益,并节省一些时间。我认为以前没有回答过,我想这样的答案会发生变化。

所以,这里是:安德鲁·谢马舍夫所说的提升日志 v2 是什么?它和约翰·托乔的一样吗?如果没有,我在哪里可以找到它?我该如何构建它?

谢谢

附言我应该提到这是在Windows上与Visual Studio Express 2010

P.P.S. 猜测"版本 2",显然只是 SVN,也有问题,但有了这一行(见下面塞尔吉奥的回答)

<toolset>msvc:<define>BOOST_FILESYSTEM_VERSION=2

在 bjam 文件中,至少我可以编译。但是,此文件

#include <boost/log/trivial.hpp>
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";
}

直接从教程中出来,尽管现在正在编译和链接,但不会产生任何输出......

这是我在Linux框中安装Boost.Log的方法。在构建和安装 Boost 库之前,有一个重要的注意事项:确保您已安装像 pthreads 这样的线程库。大多数包管理器都应该拥有它们。

以下是构建步骤:

如果您已经从源代码安装了 Boost,那么它很好继续下一步。否则从这里下载它(最好是最新版本(v1.46)。我使用了v1.45)。提取提升库说:/opt。我们可以与 Boost.Log 一起构建库。

  • 从Sourceforge下载Boost.Log。
  • 将 Boost.Log 源存档解压缩到一个文件夹中 - 比如说/opt。将日志文件夹复制到:/opt/boost-log-1.0/boost到您的 boost 源目录 /opt/Boost_1_45_0/boost(假设您已在 /opt 中提取它)。
  • 将日志文件夹复制到:/opt/boost-log-1.0/libs到您的 boost libs 目录/opt/Boost_1_45_0/libs(假设您已在 /opt 中提取它)。如果您尚未安装其他 Boost 库,请按照以下步骤操作:
    • cd /opt/Boost_1_45_0
    • .bootstrap.sh --show-libraries — 这将列出将要构建和安装的所有库。您应该会看到log列为其中的一部分。
    • .bootstrap.sh --with-libraries=all --prefix=/usr/local --includedir=/usr/local/include --libdir=/usr/local/lib
    • ./bjam install

最后,确保$LD_LIBRARY_PATH具有/usr/local/libbjam中指定的用于安装构建库的路径)作为其中的一部分。如果未编辑~/.bashrc并添加以下内容:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH

boost log v2 只是你通过检查 trunk 得到的,根据 Andrey 在你链接的帖子中所说的。

事实上,这个版本似乎在针对 boost::filesystem v3 进行编译时也存在问题。

如果这也是您的情况,一种解决方法是在添加后进行编译

<define>BOOST_FILESYSTEM_VERSION=2

到卡纸文件。

如果这不起作用,则检查您正在构建库的单线程版本还是多线程版本。 多线程提升日志应该经过更多测试(根据安德烈的说法)。

希望这有帮助...我还没有尝试过...

编辑:

在哪里添加 ?

我会将其添加到boost-log/libs/log/build/Jamfile.v2 shared小节的requirements部分:

project boost/log
    : source-location ../src
    : requirements
       <link>shared:<define>BOOST_LOG_DLL
       <link>shared:<define>BOOST_FILESYSTEM_VERSION=2

编辑:从Cookie的评论中,BOOST_FILESYSTEM_VERSION=2应指定为

       <link>msvc:<define>BOOST_FILESYSTEM_VERSION=2

不是在shared.

经过大量的搜索和测试,我发现了什么。

  • 下载所需的 Boost(我在稳定版本 1.51 上对其进行了测试)

  • 从此处查看提升日志,并将<boost-log>/boost/log<boost-log>/libs/log复制到<boost>/boost/log<boost>/libs

  • 确保您有一个受支持的编译器(我的问题是!它适用于 gcc 4.1.7)

  • ./bootstrap.sh --with-libraries=all --prefix=<dir_to_install>
    

    ./b2 address-model=32
    

如果一切按计划进行,将使用编译的库(包括 libboost_log.so)创建一个目录<boost>/stage/libs

笔记:

  • 我不确定为什么,但前缀不起作用。我期待看到那里建造的图书馆。

  • 使用b2而不是bjam

  • 无需更改<boost-log>中的Jamfile

  • 我收到了一堆警告,但在构建日志时没有。

我希望它能帮助到某人。

如果我正确解释Andrew的答案,他的建议是不要使用Boost.Log的打包版本之一,而是从SourceForge上的boost-log SVN存储库进行SVN检查。我快速查看了那里的后备箱中的文件,找不到对 v1 的任何引用。

不,我很确定他不是在谈论John Torjo的Boost.Log v2,而是他的Boost.Log的新版本

,尚未打包发布。我们正在使用 Boost.Log

,到目前为止我对它非常满意;你的问题实际上帮助我弄清楚了该怎么做才能使用 1.46.1 构建 Boost.Log。

1197 行的 text_file_backend.cpp 中未知符号,同时使用 boost 1.51.0 构建 boost-log-1-1

我使用的是Windows MSVC 2010,但我怀疑我遇到的问题也可能是其他平台的常见问题。我将 boost.log 源代码复制到 boost 1.51 源代码树中,并按照说明运行引导程序.bat 和 .\b2。构建失败,抱怨 get_generic_category() 是第 1197 行text_file_backend.cpp中的未知符号

我更改了text_file_backend.cpp的第 1197 行,使其现在显示为

system::error_code(system::errc::io_error, system::generic_category()));

我重新运行了构建。构建工作了。

我希望这可以帮助其他在使用 boost 1.51 构建提升日志库时遇到困难的人

有关此更改的详细信息,请参阅 http://www.boost.org/doc/libs/1_51_0/libs/system/doc/reference.html#Deprecated-names。

编辑:我刚刚再次尝试直接从Subversion主干使用提升日志源,它编译正常。所以解决方案是:忽略 boost-log 1.1 并使用 Subversion 主干。