什么是提升日志,如何获取它以及如何构建它
What is boost log, how to get it and how to build it
所以我听到了关于提升日志的好消息。这声称它的存在:
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/lib
(bjam
中指定的用于安装构建库的路径)作为其中的一部分。如果未编辑~/.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 主干。
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 构建一个由C和C++文件组成的库
- llvm构建器向基本块添加终止符
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 如何跨平台将二进制资源构建到程序中?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 如何解决 Ninja c++ 构建和执行问题
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 用CMake构建C++协议
- 通过增强构建构建Python扩展