该库应该能够使用符合 C++11 标准的编译器构建和工作。该库已在以下平台成功构建和测试
以下编译器/平台不受支持,可能无法编译该库
Boost.Log 应该兼容 Boost 支持的所有硬件架构。但是,对于 32 位 x86 架构,该库至少需要 i586 级别的 CPU 才能运行。
自 4.5 版本以来,GCC 版本支持链接时优化 (LTO),其中大多数优化和二进制代码生成发生在链接阶段。这允许执行更高级的优化并生成更快的代码。不幸的是,它与包含需要使用不同编译器选项编译的源文件的项目不能很好地配合。Boost.Log 就是这样的项目之一,其某些部分的源代码包含针对现代 CPU 的优化,并且无法在较旧的 CPU 上运行。为 Boost.Log 启用 LTO 将产生与较旧的 CPU 不兼容的二进制文件(GCC 错误 61043, 77845),这可能会导致运行时崩溃。因此,Boost.Log 不支持 LTO。
GCC 存在一个错误,当使用 -march=native
命令行参数时,可能会导致编译失败。建议避免使用 -march=native
参数(或 instruction-set=native
b2 属性),而是显式指定目标 CPU(例如 instruction-set=sandy-bridge
)。
为了使用这些编译器编译库,需要进行特殊准备。首先,如果使用 MinGW 或 Cygwin,请确保您已安装最新的 GCC 版本。该库很可能无法使用 GCC 3.x 编译。
其次,在某些时候,该库将需要消息编译器工具 (mc.exe
),这在 MinGW、Cygwin 和某些版本的 MSVC Express Edition 中不可用。通常,库构建脚本将自动检测系统上是否存在消息编译器,如果不存在,则禁用库中与事件日志相关的部分。如果需要事件日志支持,但在系统上找不到,您有三个选项来解决此问题。推荐的解决方案是获取原始的 mc.exe
。此工具在 Windows SDK 中可用,可以从 Microsoft 站点免费下载(例如,此处)。此外,此工具应该在 Visual Studio 2010 Express Edition 中可用。在编译期间,mc.exe
应该可以通过 PATH
环境变量中的一个目录访问。
另一种方法是尝试使用 MinGW 和 Cygwin 分发的 windmc.exe
工具,它是原始 mc.exe
的类似物。为了做到这一点,您必须修补 Boost.Build 文件(特别是 tools/build/tools/mc.jam
文件),如 本工单中所述。之后,您将能够指定 mc-compiler=windmc
选项给 b2 来构建库。
如果由于某种原因消息编译器检测失败,您可以通过在构建库时定义 BOOST_LOG_WITHOUT_EVENT_LOG
配置宏来显式禁用对事件日志后端 的支持。这将消除对消息编译器的需求。有关更多配置选项,请参阅 本节。
Windows XP 上的 MinGW 用户可能会受到操作系统捆绑的 msvcrt.dll 中的 错误的影响。该错误表现为库格式化日志记录时崩溃。此问题并非 Boost.Log 特有,也可能在与区域设置和 IO 流管理相关的不同上下文中出现。
Cygwin 支持非常初步。Cygwin 中可用的默认 GCC 版本(截至撰写本文时为 4.5.3)由于编译器错误而无法编译该库。您将必须从源代码构建更新的 GCC。即使这样,某些 Boost.Log 功能仍然不可用。特别是,不支持基于套接字的 syslog 后端,因为它基于 Boost.ASIO,而 Boost.ASIO 在此平台上无法编译。但是,本机 syslog 支持仍然存在。