Boost C++ 库

...世界上最受推崇和设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

编译器

本节包含一些关于各种编译器如何与此库协同工作的信息。它并非详尽无遗,随时欢迎更新的经验。我们已尽力抑制无益的警告,但这在所有系统上都难以实现。

表 1.9. 支持/已测试的编译器

平台

编译器

是否支持 long double 类型

注释

Windows

MSVC 7.1 及更高版本

所有测试均通过。

我们的目标是在此编译器上,在 4 级警告级别下保持标头文件无警告。

Windows

Intel 8.1 及更高版本

所有测试均通过。

我们的目标是在此编译器上,在 4 级警告级别下保持标头文件无警告。但是,测试用例倾向于生成大量与测试数据数值下溢相关的警告:这些是无害的。

Windows

GNU Mingw32 C++

所有测试均通过。

我们的目标是在此编译器上,使用 -Wall 选项保持标头文件无警告。

Windows

GNU Cygwin C++

所有测试均通过。

我们的目标是在此编译器上,使用 -Wall 选项保持标头文件无警告。

由于没有可用的原生 long double C 标准库函数,long double 类型支持已被禁用。

Windows

Borland C++ 5.8.2 (Developer studio 2006)

我们仅与此编译器有部分兼容性

Long double 类型支持已被禁用,因为原生 long double C 标准库函数实际上只是转发到 double 版本。当使用 long double 重载时,这可能会导致不可预测的行为:例如,将 sqrtl 应用于有限值可能会导致无限结果。

某些函数仍然无法编译,目前尚无已知的解决方法。

Windows 7/Netbeans 7.2

Clang 3.1

抽样示例 OK。预计所有测试都能编译并正常运行。

Linux

GNU C++ 3.4 及更高版本

所有测试均通过。

我们的目标是在此编译器上,使用 -Wall 选项保持标头文件无警告。

Linux

Clang 3.2

所有测试均通过。

Linux

Intel C++ 10.0 及更高版本

所有测试均通过。

我们的目标是在此编译器上,使用 -Wall 选项保持标头文件无警告。但是,测试用例倾向于生成大量与测试数据数值下溢相关的警告:这些是无害的。

Linux

Intel C++ 8.1 和 9.1

所有测试均通过。

由于调用标准库 long double 数学函数可能会导致段错误,因此在这些编译器版本中,long double 类型支持已被禁用。此问题特定于 Linux 发行版和 glibc 版本,是 Intel 错误报告 #409291。完全更新的 Intel 9.1 版本(版本 l_cc_c_9.1.046 之后)不应存在此问题。如果您需要在此编译器上使用 long double 支持,请注释掉 boost/math/tools/config.hpp 文件第 55 行的 BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS 的定义。

我们的目标是在此编译器上,使用 -Wall 选项保持标头文件无警告。但是,测试用例倾向于生成大量与测试数据数值下溢相关的警告:这些是无害的。

Linux

QLogic PathScale 3.0

一些涉及概念检查的测试构建失败,否则似乎没有问题。

Linux

Sun Studio 12

一些涉及函数重载解析的测试构建失败,这些问题在实践中应很少遇到。

Solaris

Sun Studio 12

一些涉及函数重载解析的测试构建失败,这些问题在实践中应很少遇到。

Solaris

GNU C++ 4.x

所有测试均通过。

我们的目标是在此编译器上,使用 -Wall 选项保持标头文件无警告。

HP Tru64

Compaq C++ 7.1

所有测试均通过。

HP-UX Itanium

HP aCC 6.x

所有测试均通过。

不幸的是,此编译器会从我们依赖的库(TR1、Array 等)发出相当多的警告。

HP-UX PA-RISC

GNU C++ 3.4

所有测试均通过。

Apple Mac OS X, Intel

Darwin/GNU C++ 4.x

所有测试均通过。

Apple Mac OS X, PowerPC

Darwin/GNU C++ 4.x

所有测试均通过。

由于 Darwin 的 106 位 long double 实现的相当奇怪的性质,在此平台上 long double 类型支持已被禁用。如果有人愿意提供帮助,应该有可能使其工作。

Apple Mac OS X,

Clang 3.2

预计所有测试都将通过。

IBM AIX

IBM xlc 5.3

除 fpclassify 测试外,所有测试均通过,fpclassify 测试由于 std::numeric_limits 中的错误而失败,该错误影响测试代码,而不是 fpclassify 本身。IBM 编译器组已知晓此问题。


表 1.10. 不支持的编译器

平台

编译器

Windows

Borland C++ 5.9.2 (Borland Developer Studio 2007)

Windows

MSVC 6 和 7


如果您的编译器或平台未在上面列出,请尝试运行回归测试:cd 进入 boost-root/libs/math/test 并执行

bjam mytoolset

其中 "mytoolset" 是用于您的编译器的 Boost.Build 工具集的名称。很可能在现阶段许多精度测试将会失败 - 不要惊慌 - 默认的可接受误差容限非常严格,特别是对于具有扩展指数范围的 long double 类型(这些会导致为某些函数执行更极端的测试用例)。您需要仔细查看失败测试的输出,并判断错误率是否可以接受。


PrevUpHomeNext