2.2.4. C++ 互換性
すべての -std
モードの Red Hat Enterprise Linux バージョン 5、6、7、および Red Hat Developer Toolset バージョン 1 から 10 のすべてのコンパイラーは、C++98 モードの他のコンパイラーと互換性があります。
C++11、C++14、または C++17 モードのコンパイラーは、同じリリースシリーズであれば、同じモードでの別のコンパイラーとの互換性が保証されています。
サポートされる例:
- Red Hat Developer Toolset 6.x からの C++11 および C++11
- Red Hat Developer Toolset 6.x からの C++14 および C++14
- Red Hat Developer Toolset 10.x からの C++17 および C++17
- Red Hat Developer Toolset 10.x の GCC コンパイラーは、C++20 を使用してコードを構築することは可能ですが、この機能は Red Hat では実験的で、サポートされていません。
- 本セクションで説明されている互換性情報はすべて、GCC C++ コンパイラーの Red Hat が提供するバージョンにのみ関連します。
2.2.4.1. C++ ABI
-std=c++98
または -std=gnu++98
で Red Hat Developer Toolset ツールチェーンが明示的にビルドした C++98 準拠のバイナリーまたはライブラリーは、Red Hat Enterprise Linux 5、6、または 7 システム GCC が構築したバイナリーおよび共有ライブラリーと自由に混在できます。
Red Hat Developer Toolset のデフォルトの言語標準設定は、GNU 拡張との C++14 で、明示的に -std=gnu++14
を使用するオプションと同じです。
Red Hat Developer Toolset では、それぞれのフラグでコンパイルされたすべての C++ オブジェクトが Red Hat Developer Toolset 6 以降を使用してビルドされている場合、C++14 言語バージョンの使用がサポートされます。デフォルトモードの C++98 でシステム GCC によってコンパイルされたオブジェクトには互換性がありますが、C++11 モードまたは C++14 モードのシステム GCC でコンパイルされたオブジェクトには互換性がありません。
Red Hat Developer Toolset 10.x 以降では、C++17 言語バージョンの使用は実験的なものになり、Red Hat によってサポートされます。C++17 でコンパイルされた C++ オブジェクトはすべて、Red Hat Developer Toolset 10.x 以降を使用してビルドする必要があります。
アプリケーションで C++11 機能、C++14 機能、および C++17 機能を使用するには、上記の ABI の互換性情報を慎重に検討する必要があります。
-std=c++0x または -
+11 以降の言語バージョンで構築されたオブジェクト、バイナリー、およびライブラリーは明示的にサポートされていません。
std=gnu++0x
フラグを使用して、Red Hat Enterprise Linux 7 システムツールチェーンで構築されたオブジェクト、バイナリー、およびライブラリーの組み合わせにより、Red Hat Developer Toolset の GCC を使用して C+
上記の C++11、C++14、および C++17 ABI のほかに、Red Hat Developer Toolset では、Red Hat Enterprise Linux アプリケーションの互換性仕様 は変更されません。Red Hat Developer Toolset で構築されたオブジェクトを、Red Hat Enterprise Linux 7 ツールチェーン (特に .o
/.a
ファイル) で構築したオブジェクトと混在する場合、Red Hat Developer Toolset ツールチェーンはどのリンクにも使用してください。これにより、Red Hat Developer Toolset が提供する新しいライブラリー機能は、リンク時に解決されます。
ベクトルの長さを持つシステムで名前が競合しないように、SIMD ベクトルタイプの新しい標準マングリングが追加されました。Red Hat Developer Toolset のコンパイラーは、デフォルトで新しいマングリングを使用します。GCC C++ コンパイラーコールに -fabi-version=2
または -fabi-version=3
オプションを追加して、以前の標準マングリングを使用できます。以前の mangling を使用するコードの警告を表示するには、-Wabi
オプションを使用します。
Red Hat Enterprise Linux 7 では、GCC C++ コンパイラーはデフォルトで古い mangling を使用しますが、強固なエイリアスに対応するターゲットに新しいマングリングを持つエイリアスをエミュレートします。コンパイラーコールに -fabi-version=4
オプションを追加して、新しい標準マングリングを使用できます。以前の mangling を使用するコードの警告を表示するには、-Wabi
オプションを使用します。
Red Hat Enterprise Linux 7 では、Red Hat Developer Toolset の GCC C++ コンパイラーは、std::string
の古い参照表示実装を使用します。これは、Red Hat Enterprise Linux 7 システムツールチェーンの GCC との互換性のために行われます。つまり、std::pmr::string
などの新しい C++17 機能は、Red Hat Developer Toolset コンパイラーを使用している場合でも、Red Hat Enterprise Linux 7 では利用できないことを意味します。