Oracle® Solaris Studio 12.4 リリースの新機能

印刷ビューの終了

更新: 2014 年 12 月
 
 

C++11 機能の使用

Oracle Solaris Studio 12.4 で、C++ コンパイラは新しい言語であり ABI (Application Binary Interface) である C++11 をサポートします。

C++ 11 モードの CC コンパイラは g++ ABI、および Oracle Solaris Studio に付属するバージョンの g++ ランタイムライブラリを使用します。このリリースでは、g++ ランタイムライブラリのバージョン 4.8.2 が使用されます。

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++11CC コマンド行に追加します。コマンド行での位置は重要ではありません。このオプションにより、コンパイラは C++11 での新しい言語機能を認識し、標準ライブラリの C++11 バージョン (付属する g++ ランタイムライブラリ) を使用します。–std=c++11 と互換性がないとしてマークされているオプションを除き、その他すべてのコマンド行オプションを C++11 とともに使用でき、通常どおりの効果を発揮します。–std=c++11 オプションは、ライブラリまたは実行可能プログラムをビルドするときに使用される CC コマンドごとに、一貫して使用する必要があります。


注 -  C++11 の機能は、デフォルトで使用できません。任意の C++11 機能を使用するには、新しい –std=c++11 オプションを CC コンパイラで使用する必要があります。このオプションは g++ ABI を使用しますが、異なる ABI を選択するオプションはありません。プログラムのすべてのモジュールをコンパイルするときに、このオプションを使用する必要があります。

このリリースにおける C++11 の互換性情報

このリリースのコンパイラには、次のように更新されたバージョンの詳細情報があります。

コンパイラのバージョン:

C++ 5.13

コンパイラのバージョンのマクロ:

__SUNPRO_CC = 0x5130

コンパイラのバージョンのマクロは、以前のどのリリースよりも厳密に大きいため、__SUNPRO_CC>=0x5100 などのバージョン比較は動作し続けます。

コンパイラのデフォルトモード:

C++03、-compat=5 を指定。

これは、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 オプションが 1 つのコマンド行に出現する場合、最後に指定されたものがそれまでに指定されたものをオーバーライドします。例:
    -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.cc、および f2.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 がある場合は、–std=c++11 を各 CC コマンド行 (通常は CCFLAGS および LFLAGS マクロ内) に追加し、互換性のないオプション (–compat=5–library=stlport4 など) を削除することで、C++11 プログラムをビルドするように変換できます。有効な C++ プログラムは、C++11 モードでコンパイルするときに、通常は変更なしでコンパイルして実行されます。しかし、実際のプログラムの多くは、標準的でないコンパイラの動作や機能拡張に依存しており、意図せずに依存していることもあります。そのようなコードは、C++11 モードでコンパイルできないことがあります。