【问题标题】:What is boost log, how to get it and how to build it什么是boost log,如何获取以及如何构建
【发布时间】:2011-08-29 21:41:13
【问题描述】:

所以我听说了关于 boost log 的好消息。这声称它的存在:

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

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

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

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 所说的 boost log v2。

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

那么,这里是:Andrew Semashev 所说的 boost log v2 是什么?它和约翰托尔乔的一样吗?如果没有,我在哪里可以找到它?以及如何构建它?

谢谢

附:我应该提到这是在带有 Visual Studio Express 2010 的 Windows 上

附言猜猜“版本 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";
}

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

【问题讨论】:

  • 设法通过#include "boost\log\utility\init\to_file.hpp" #include "boost\log\utility\init\to_console.hpp"logging::init_log_to_file("sample.log");logging::init_log_to_console(); 获得输出
  • 我只是感觉到你的痛苦,感谢您的发帖。即使所有这些帮助我的仍然没有建立。
  • Boost.Log 自 1.54.0 起在 Boost 中
  • @jla:那么,如果 Boost.Log 现在在 Boost 中,这不是让这个问题变得过时了吗?如果是这样,OP:由于这条评论,您会考虑删除它,还是用 Boost 1.54+ 将其标记为过时?

标签: c++ logging boost boost-log


【解决方案1】:

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

以下是构建步骤:

如果您已经从源代码安装了 Boost,则可以继续下一步。否则从here下载(最好是最新版本(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/lib(在bjam 中指定的路径来安装构建的库)作为它的一部分。如果不是编辑您的~/.bashrc 并添加以下内容:

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

【讨论】:

【解决方案2】:

根据 Andrey 在您链接的帖子中所说的,您可以通过检查主干获得 boost log v2。

确实,这个版本似乎也有针对 boost::filesystem v3 编译的问题。

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

<define>BOOST_FILESYSTEM_VERSION=2

到 jamfile。

如果这不起作用,那么请检查您是在构建库的单线程版本还是多线程版本。应该对多线程 boost-log 进行更多测试(根据 Andrey 的说法)。

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

编辑:

在哪里添加?

我会将其添加到boost-log/libs/log/build/Jamfile.v2shared 小节的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

【讨论】:

  • 抱歉,我应该在哪里添加这个?
  • project boost/log : source-location ../src : requirements &lt;snip&gt; # shared:BOOST_LOG_DLL shared:BOOST_FILESYSTEM_VERSION=2 # not working &lt;toolset&gt;msvc:&lt;define&gt;BOOST_FILESYSTEM_VERSION=2 # compiles &lt;snip&gt; 嗯格式有点草率......无论如何......第二行编译,你答案中的那行不太有效。
  • 谢谢,修正了格式并为其他读者添加了您的报价。
【解决方案3】:

经过大量搜索和测试,我发现了这一点。

  • 下载所需的 Boost(我在稳定版 1.51 上测试过)

  • here 签出 boost-log 并将 &lt;boost-log&gt;/boost/log&lt;boost-log&gt;/libs/log 复制到 &lt;boost&gt;/boost/log&lt;boost&gt;/libs

  • 确保您有 supported compiler(我的问题是!它适用于 gcc 4.1.7)

  • 运行

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

    ./b2 address-model=32
    

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

注意事项:

  • 我不知道为什么,但前缀不起作用。我期待看到那里建立的库。

  • 使用b2 而不是bjam

  • 无需在&lt;boost-log&gt; 中更改Jamfile

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

我希望它对某人有所帮助。

【讨论】:

    【解决方案4】:

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

    不,我很确定他说的不是 John Torjo 的 Boost.Log v2,而是他的 Boost.Log 的更新版本,尚未打包发布。

    我们正在使用 Boost.Log,到目前为止我对它非常满意;您的问题实际上帮助我弄清楚了如何使用 1.46.1 构建 Boost.Log ...

    【讨论】:

    • 好吧。为了回应这个答案,我确实查看了boost-log.svn.sourceforge.net/svnroot/boost-log。但是,我仍然认为它是 v1,无论哪种方式,我仍然收到与 boost 文件系统相关的错误。
    • 我刚刚从 sourceforge 中检查了主干,并且在 Boost 1.46.1 和 VS2010 中构建良好。
    【解决方案5】:

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

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

    我更改了 text_file_backend.cpp 的第 1197 行,使其现在可以读取

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

    然后我重新运行了构建。构建成功。

    我希望这对使用 boost 1.51 构建 boost-log 库有困难的其他人有所帮助

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

    编辑:我刚刚再次尝试使用直接来自 Subversion 主干的 boost-log 源,它编译成功。所以解决方案是:忽略 boost-log 1.1 并使用 Subversion 主干。

    【讨论】:

    • 如果这发生在 boost-log 的主干上,那么你应该在作者论坛上发帖让他意识到这个问题。
    • 对罗杰·斯图尔特的回应。我使用了从 boost 网站下载的压缩 boost 1.51 源代码。不过,在作者的论坛上发帖是个好主意。我会这样做的。
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    相关资源
    最近更新 更多