Oracle® Solaris Studio 12.4 新增功能

退出打印视图

更新时间: 2014 年 12 月
 
 

使用 C++11 功能

在 Oracle Solaris Studio 12.4 中,C++ 编译器支持 C++11,一种新语言和 ABI(Application Binary Interface,应用程序二进制文件接口)。

在 C++ 11 模式下,CC 编译器使用 g++ ABI 和随 Oracle Solaris Studio 提供的 g++ 运行时库版本。对于此发行版,使用 4.8.2 版本的 g++ 运行时库。

ABI 描述生成的对象代码中的低级别详细信息。使用不同 ABI 的模块无法成功链接在一起成为程序。这意味必须在程序中的所有模块上使用 C++11 模式,或者不在任何模块上使用该模式。

如果使用 Oracle Solaris Studio 12.4 C++ 作为对 Oracle Solaris Studio 12.3 (C++ 5.12) 的升级,则不使用 C++11 功能时不需要对脚本或 makefile 进行更改。一个异常是 Rogue Wave Tools.h++ 不可用。有关不再支持的功能的更多信息,请参见Oracle Solaris Studio 12.4:发行说明 中的此发行版中已经删除的功能

要在 C++11 模式下进行编译,请将选项 –std=c++11 添加到 CC 命令行。命令行上的位置并不重要。通过该选项,编译器可以识别 C++11 中的新语言功能,并使用标准库(提供的 g++ 运行时库)的 C++11 版本。除了标记为与 –std=c++11 不兼容的选项,所有其他命令行选项都可以与 C++11 一起使用并具有其通常所有的效果。必须在用于构建库或可执行程序的每个 CC 命令上一致地使用 –std=c++11 选项。


注 -  缺省情况下无法使用 C++11 功能。要使用 C++11 功能,必须将新的 –std=c++11 选项与 CC 编译器配合使用。此选项使用 g++ ABI,不可以选取不同的 ABI。必须使用该选项来编译程序的所有模块。

此发行版中 C++11 的兼容性信息

此发行版中的 C++ 编译器具有以下更新版本详细信息。

编译器版本:

C++ 5.13

编译器版本宏:

__SUNPRO_CC = 0x5130

编译器版本宏完全大于所有早期发行版,所以 __SUNPRO_CC>=0x5100 等版本比较将继续运行。

编译器缺省模式:

具有 -compat=5 的 C++03。

这是与 Oracle Solaris Studio 12.3 发行版中的 C++ 5.12 相同的缺省模式。

Oracle Solaris Studio 12.3 具有以下编译器模式选项:

–compat=5

此选项选择 C++03 和 Sun ABI。这是缺省值。

–compat=g

此选项选择 C++03 和 g++ ABI,使用随编译器提供的 gcc 头和库。在 Oracle Solaris Studio 12.3 中,gcc 运行时库安装在 Oracle Solaris 上的 /usr/sfw/lib 中(如果存在的话)。在此发行版中,将使用随编译器提供的 gcc 运行时库。

该发行版添加了选项 –std=[ c++11 | c++0x | c++03 | sun03],其中选项值定义如下:

–std=c++11

此选项选择 C++11 和 g++ ABI,并使用在 Oracle Solaris Studio 12.4 中安装的 g++ 4.8.2 运行时库。

–std=c++0x

此选项等效于 –std=c++11 选项,为 GCC 兼容性而提供。C++11 标准最初昵称为 C++0x。

–std=c++03

此选项等效于 –compat=g 选项。

–std=sun03

此选项等效于 –compat=5


注 -  不能混合 –compat–std 选项,如果同时使用两者将产生错误。如果多个 –std 选项或多个 –compat 选项显示在命令行上,指定的最后一个选项将覆盖先前指定的选项。例如:
    -compat=g   -compat=5   // OK, -compat=5 is used
    -std=c++11  -std=c++03  // OK, -std=c++03 is used
    -std=c++11  -compat=g   // always an error
    -compat=g   -std=c++03  // always an error

16 位 Unicode 与 C++11 的不兼容性

选择 –xustr=ascii_utf16_ushort 与 C++11 不兼容,不允许使用。

该选项将 U"ASCII_string" 解释为 16 位 Unicode,但对于该语法 C++11 需要 32 位 Unicode。

此发行版中库与 C++11 的不兼容性

对于 –std=x–compat=g,不允许使用以下 –library=v 选项:

  • Cstd

  • stlport4

  • stdcxx4

  • Crun

  • iostream

需要列出要链接的库时,例如创建共享库时,如果使用 –compat=g–std=x 选项,则按此顺序使用以下选项:

-lstdc++ -lgcc_s -lCrunG3

使用 CC 创建可执行程序时,不应列出这些库,因为 CC 驱动程序将为您列出它们。

有关此发行版中删除的库的信息,请参见Oracle Solaris Studio 12.4:发行说明 中的此发行版中已经删除的功能

使用 C++11 模式的示例

以下命令可用于从模块 main.ccf1.ccf2.cc 构建可执行程序 myprogram

% CC -std=c++11 -m32 -O -c main.cc 
% CC -std=c++11 -m32 -O -c f1.cc f2.cc 
% CC -std=c++11 -m32 -O main.o f1.o f2.o -o myprogram

如果具有使用较旧版本的 Oracle Solaris Studio 构建 C++ 程序的 Makefile,可以通过以下方法将其转换为构建 C++11 程序:向每个 CC 命令行添加 –std=c++11(通常在 CCFLAGSLFLAGS 宏中)并删除任何不兼容的选项,例如 –compat=5–library=stlport4。有效 C++ 程序在 C++11 模式下编译时通常会在不更改的情况下编译和运行。不过,许多实际的程序有时会偶尔依赖于非标准的编译器行为或扩展。此类代码可能无法在 C++11 模式下编译。