29

所以我听说了关于 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 是什么?它和约翰托尔乔的一样吗?如果没有,我在哪里可以找到它?我该如何构建它?

谢谢

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

PPS Guess“版本 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";
}

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

4

5 回答 5

14

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

以下是构建步骤:

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

  • 从Sourceforge下载 Boost.Log 。
  • 将 Boost.Log 源文件提取到一个文件夹中——比如/opt. 将 log 文件夹复制到:/opt/boost-log-1.0/boost到您的 boost 源目录/opt/Boost_1_45_0/boost(假设您已将其解压缩到/opt)。
  • 将 log 文件夹复制/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
于 2011-05-20T19:17:22.927 回答
8

根据安德烈在您链接的帖子中所说的,boost log v2 就是您通过检查主干得到的。

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

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

<define>BOOST_FILESYSTEM_VERSION=2

到 jamfile。

如果这不起作用,那么请检查您是在构建库的单线程还是多线程版本。应该对多线程增强日志进行更多测试(根据安德烈)。

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

编辑:

在哪里添加?

我会将它添加到,requirements小节的部分:boost-log/libs/log/build/Jamfile.v2shared

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

于 2011-05-20T19:11:18.013 回答
2

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

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

  • 从此处签出 boost-log并复制到<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
    

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

笔记:

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

  • b2不使用bjam

  • 无需更改Jamfile<boost-log>

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

我希望它可以帮助某人。

于 2012-09-27T14:40:07.827 回答
1

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

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

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

于 2011-05-20T18:59:02.727 回答
1

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

我正在使用 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 主干。

于 2012-09-13T12:38:38.570 回答