Oracle Solaris Studio 12.2:C++ 用户指南

第 1 章 C++ 编译器

本章提供有关最新 Solaris Studio C++ 编译器的一般信息。

1.1 Solaris Studio 12.2 C++ 5.11 编译器的新特性和新功能

本节介绍在 Solaris Studio 12.2 C++ 5.11 编译器发行版中引入的新增和更改的特性和功能的摘要列表。

1.2 x86 特殊注意事项

针对 x86 Solaris 平台进行编译时,有一些重要问题值得注意。

传统的 Sun 风格的并行化 pragma 在任何平台中都不再可用。而改用 OpenMP。有关将传统并行化指令转换为 OpenMP 的信息,请参见《Solaris Studio 12.2:OpenMP API 用户指南》

xarch 设置为 -ssesse2sse2asse3 或更高时编译的程序只能在提供这些扩展和功能的平台上运行。

从 Solaris 9 4/04 开始的 Solaris OS 发行版在 Pentium 4 兼容的平台上支持 SSE/SSE2。早期版本的 Solaris OS 不支持 SSE/SSE2。如果所运行的 Solaris OS 不支持由 -xarch 选定的指令集,则编译器无法为该指令集生成链接代码。

如果在不同的步骤中进行编译和链接,请始终使用编译器和相同的 -xarch 设置进行链接,以确保链接正确的启动例程。

在 x86 上得到的数值结果可能与在 SPARC 上得到的结果不同,这是由 x86 80 位浮点寄存器造成的。为了最大限度减少这些差异,请使用 -fstore 选项或使用 -xarch=sse2 进行编译(如果硬件支持 SSE2)。

因为内部数学库(例如,sin(x))不同,所以 Solaris 和 Linux 之间的数值结果也会不同。

1.3 针对 64 位平台进行编译

使用 -m32 选项针对 ILP32 32 位模型进行编译。使用 -m64 选项针对 LP64 64 位模型进行编译。

ILP32 模型指定 C++ 语言的 int、long 和 pointer 数据类型的宽度均为 32 位。LP64 模型指定 long 和 pointer 数据类型均为 64 位。Solaris 和 Linux OS 还支持 LP64 内存模型下的大型文件和大型数组。

如果使用 -m64 进行编译,则生成的可执行文件仅能在运行 64 位内核的 Solaris OS 或 Linux OS 下的 64 位 UltraSPARC 或 x86 处理器上运行。64 位对象的编译、链接和执行只能在支持 64 位执行的 Solaris 或 Linux OS 上进行。

1.4 二进制兼容验证

在 Solaris 系统上,从 Sun Studio 11 开始,使用 Solaris Studio 编译器编译的程序二进制文件标记有体系结构硬件标志,用于指示编译的二进制文件所采用的指令集。运行时,会检查这些标记标志以验证该二进制文件是否可以在它尝试在上面执行的硬件上运行。

如果程序不包含这些体系结构硬件标志,或者如果平台没有启用适当的功能或指令集扩展,则运行此程序可能会导致段故障或错误结果,且不会显示任何显式警告消息。

此警告还会扩展到采用 .il 内联汇编语言函数或 __asm() 汇编程序代码(使用 SSE、SSE2、SSE2a 和 SSE3 以及更新指令和扩展)的程序。

1.5 标准一致性

C++ 编译器 (CC) 支持 C++ ISO 国际标准 ISO IS 14882:2003 编程语言-C++。当前发行版本附带的自述文件描述了与标准需求的所有差异。

在 SPARC 平台上,编译器提供了对 SPARC V8 和 SPARC V9(包括 UltraSPARC 实现)优化开发功能的支持。在 Prentice-Hall for SPARC International 发行的第 8 版 (ISBN 0-13-825001-4) 和第 9 版 (ISBN 0-13-099227-5) SPARC Architecture Manual 中定义了这些功能。

在本文档中,“标准”是指与上面列出的标准版本相一致。“非标准”或“扩展”是指这些标准的这些版本之外的功能。

负责标准的一方可能会不时地修订这些标准。C++ 编译器兼容的适用标准版本可能被修订或替换,这将会导致以后的 Solaris Studio C++ 编译器发行版本在功能上与旧的发行版本产生不兼容。

1.6 C++ 自述文件

C++ 编译器的自述文件强调了关于编译器的重要信息。现在,它属于《Oracle Solaris Studio 12.2 的新增功能》指南的一部分,其中包括:

此发行版的文档索引页上提供了新增功能指南,网址为:http://www.oracle.com/technetwork/server-storage/solarisstudio/documentation

1.7 手册页

联机手册 (man) 页提供了关于命令、函数、子例程以及收集这些信息的文档。

可以通过运行以下命令来显示手册页:


example% man topic

在整个 C++ 文档中,手册页参考都以主题名称和手册节编号表示:通过 man CC 访问 CC(1)。在 man 命令中使用 -s 选项可以访问除第 1 节之外的各节(例如,ieee_flags(3M)),如下所示:


example% man -s 3M ieee_flags

1.8 本地语言支持

此发行版本的 C++ 支持使用英语以外的其他语言进行应用程序的开发,包括大多数欧洲语言、中文和日语。因此,您可以十分便捷地将应用程序从一种语言切换到另一种语言。此功能称为国际化

通常,C++ 编译器按如下方式实现国际化:

变量名称不能国际化,必须使用英文字符集。

您可以设置语言环境将应用程序从一种本地语言更改为另一种语言。关于这一点和其他本地语言支持功能的信息,请参见操作系统文档。