Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

編譯器(Compilers)

這部分包含這個庫與各種編譯器一起使用的情況。這裡的總結並不是全面的,並且歡迎相關的信息更新。對消去一些無用的編譯warings做出了一些努力,但是很難在所有的平台上做到這一點。

表?支持的/測試的 編譯器

平台

編譯器

long double 支持

說明

Windows

MSVC 7.1 and later

所有的測試都通過。

在這個編譯器中,我們在level 4的編譯設置下使得庫的頭文件不會產生warning.

Windows

Intel 8.1 and later

所有的測試都通過。

我們在level 4的編譯設置下使得庫的頭文件不會產生warning。然而,測試數據產生了許多測試數據的數值溢出相關的warning:這些warning是無害的。

Windows

GNU Mingw32 C++

所有的測試都通過。

在這個編譯器中,我們在-Wall的編譯設置下使得庫的頭文件不會產生warning.

Windows

GNU Cygwin C++

所有的測試都通過。

在這個編譯器中,我們在-Wall的編譯設置下使得庫的頭文件不會產生warning.

Long double 支持被禁止了,因為沒有本地的(native)long double 版本的C std庫函數可用。

Windows

Borland C++ 5.8.2 (Developer studio 2006)

與這個編譯器我們只有部分的兼容性:

Long double 支持被禁止,因為本地的(native)long double C標準庫函數實際上僅向前到(forward to)double版本。當使用long double重載版本時,這可能產生不可預測的結果:例如,將函數sqrtl 應用於有限值,但結果會是無限值。

一些函數仍然不能夠能夠編譯,當前沒有已知的 workarounds 。

Linux

GNU C++ 3.4 and later

所有的測試都通過。

在這個編譯器中,我們在-Wall的編譯設置下使得庫的頭文件不會產生warning.

Linux

Intel C++ 10.0 and later

所有的測試都通過。

在這個編譯器中,我們在-Wall的編譯設置下使得庫的頭文件不會產生warning。然而,測試數據產生了許多測試數據的數值向下溢出相關的warning:這些warning是無害的。

Linux

Intel C++ 8.1 and 9.1

所有的測試都通過。

Long double 支持被禁止,因為調用標準庫long double數學函數會導致segfault。這種問題是Linux發行版本和glibc版本特定的並且是Intel錯誤報告 #409291。 完整地更新到 Intel 9.1 (版本 l_cc_c_9.1.046) 就不會有這種問題。如果在這個編譯器上你需要long double支持,那麼將下面的代碼註釋掉:BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS 在頭文件 boost/math/tools/config.hpp中的第55行。

在這個編譯器中,我們在-Wall的編譯設置下使得庫的頭文件不會產生warning。然而,測試數據產生了許多測試數據的數值溢出相關的warning:這些warning是無害的。

Linux

QLogic PathScale 3.0

一些涉及到概念檢查(conceptual check)的測試沒能成功編譯,這些問題在實際中應該很少遇到。

Linux

Sun Studio 12

一些涉及到重載解析的測試沒能成功編譯,這些問題在實際中應該很少遇到。

Solaris

Sun Studio 12

一些涉及到重載解析的測試沒能成功編譯,這些問題在實際中應該很少遇到。

Solaris

GNU C++ 4.x

所有的測試都通過。

在這個編譯器中,我們在-Wall的編譯設置下使得庫的頭文件不會產生warning.

HP Tru64

Compaq C++ 7.1

所有的測試都通過。

HP-UX Itanium

HP aCC 6.x

所有的測試都通過。

不幸的是這個編譯器對於我們所依賴的庫(TR1, Array 等等).產生了很多warnings。

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's 106-bit long double 實現的特殊性質,在這個平台上long double的支持被禁止了。如果有人準備提供幫助的話,應該可以在這個平台上通過。

IMB AIX

IBM xlc 5.3

所有的測試都通過,除了 fpclassify 測試失敗,之是由於std::numeric_limits中的bug。這個bug影響測試代碼,但是並不影響 fpclassify 本身。 IBM 編譯器開發組注意到了這個問題。


不支持的編譯器

平台

編譯器

Windows

Borland C++ 5.9.2 (Borland Developer Studio 2007)

Windows

MSVC 6 和 7


如果你的編譯器沒有列舉在這裡,那麼請運行回歸測試(regression tests): 輸出命令cd 到 boost-root/libs/math/test 並輸入:

bjam mytoolset

其中"mytoolset" 是針對於你的編譯器的 Boost.Build 工具集的名字 。這裡的可能性是used 許多的精確度測試會在這個階段失敗 - 不要驚慌 -缺省的可接受誤差容許度太小了,尤其是對於具有擴展指數範圍(extended exponent range)的long double類型(這使得會對一些函數運行更極限的測試用例)。你需要注意失敗的測試情況並判斷誤差率是否是可接受的。


PrevUpHomeNext