本节包含一些关于各种编译器如何与此库协同工作的信息。它并非详尽无遗,随时欢迎更新的经验。我们已尽力抑制无益的警告,但这在所有系统上都难以实现。
表 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 重载时,这可能会导致不可预测的行为:例如,将 某些函数仍然无法编译,目前尚无已知的解决方法。 |
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 测试由于 |
如果您的编译器或平台未在上面列出,请尝试运行回归测试:cd 进入 boost-root/libs/math/test 并执行
bjam mytoolset
其中 "mytoolset" 是用于您的编译器的 Boost.Build 工具集的名称。很可能在现阶段许多精度测试将会失败 - 不要惊慌 - 默认的可接受误差容限非常严格,特别是对于具有扩展指数范围的 long double 类型(这些会导致为某些函数执行更极端的测试用例)。您需要仔细查看失败测试的输出,并判断错误率是否可以接受。