ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
マニュアルページセクション 5: 標準、環境、マクロ Oracle Solaris 11.1 Information Library (日本語) |
- Oracle Solaris でサポートされている標準および仕様
Oracle Solaris は、IEEE Std 1003.1 および IEEE Std 1003.2 (一般には、それぞれ POSIX.1 および POSIX.2 と呼ばれます) をサポートしています。次の表は、これらの標準の各バージョンと簡単な説明、およびそれに最初に準拠した SunOS または Solaris リリースを示しています。
|
Oracle Solaris はまた、X/Open Common Applications Environment (CAE) Portability Guide Issue 3 (XPG3) および Issue 4 (XPG4)、Single UNIX Specification (SUS、XPG4v2 ともいう)、Single UNIX Specification, Version 2 (SUSv2)、および Single UNIX Specification, Version 3 (SUSv3) もサポートしています。XPG4 と SUS のどちらにも、Networking Services Issue 4 (XNS4) が含まれています。SUSv2 には、Networking Services Issue 5 (XNS5) が含まれています。
次の表は、各 X/Open 仕様と簡単な説明、およびそれに最初に準拠した SunOS または Solaris リリースを示しています。
|
XNS4 仕様は ILP32 (32 ビット) 環境での使用に関してのみ安全であり、LP64 (64 ビット) アプリケーション環境で使用すべきではありません。ILP32 および LP64 環境にわたって移植可能な LP64 クリーンのインタフェースを備えた XNS5 または SUSv3 を使用してください。Solaris リリース 7 から Oracle Solaris 11 までは、ILP32 環境と LP64 環境の両方をサポートしています。
Solaris リリース 7 - 10 は、The Open Group の UNIX 98 Product Standard に準拠するようにブランド化されています。Solaris 10 から Oracle Solaris 11 までは、The Open Group の UNIX 03 Product Standard に準拠するようにブランド化されています。
Solaris リリース 2.0 から Oracle Solaris 11 までは、System V Interface Definition, Third Edition, Volumes 1 - 4 (SVID3) で指定されたインタフェースをサポートしています。ただし、この仕様 (UNIX Systems Laboratories) の開発者はすでに活動しておらず、またこの仕様は POSIX および X/Open CAE 仕様に従っているため、現在この仕様に準拠するには何が必要かについてはなんらかの意見の不一致があることに注意してください。
Oracle Solaris Studio 12.3 C コンパイラがインストールされている場合、Oracle Solaris 11 は ANSI X3.159-1989 Programming Language - C および ISO/IEC 9899:1990 Programming Language - C (C) インタフェースをサポートします。
Oracle Solaris Studio 12.3 C コンパイラがインストールされている場合、Oracle Solaris 11 は ISO/IEC 9899:1990 Amendment 1:1995: C Integrity をサポートします。
Oracle Solaris Studio 12.3 C コンパイラがインストールされている場合、Oracle Solaris 11 は ISO/IEC 9899:1999 Programming Language - C をサポートします。
Oracle Solaris Studio 12.3 C++ コンパイラがインストールされている場合、Oracle Solaris 11 は ISO/IEC 14882:1998 Programming Language - C++ をサポートします。その標準のサポートされていない機能は、コンパイラの README ファイルで説明されています。
POSIX.2、POSIX.2a、XPG4、SUS、または SUSv2 に必要な動作が Solaris ユーティリティーの履歴動作と競合する場合、そのユーティリティーの元の Solaris バージョンは変更されていません。標準に準拠した新しいバージョンは /usr/xpg4/bin で提供されています。POSIX.1–2001 または SUSv3 に必要な動作が Solaris ユーティリティーの履歴動作と競合する場合、標準に準拠した新しいバージョンは /usr/xpg4/bin または /usr/xpg6/bin で提供されています。POSIX.1–2001 または SUSv3 に必要な動作が POSIX.2、POSIX.2a、SUS、または SUSv2 と競合する場合、SUSv3 標準に準拠した新しいバージョンは /usr/xpg6/bin で提供されています。
標準に準拠したユーティリティーを使用するアプリケーションは、適切なユーティリティーを取得するために、PATH (sh(1) または ksh(1)) または path (csh(1)) 環境変数を設定して、次に示されているディレクトリを指定されている順序で指定する必要があります:
/usr/bin
使用しているコンパイラのバイナリを含むディレクトリ
アプリケーションで必要なバイナリを含むほかのディレクトリ
/usr/xpg4/bin
/usr/bin
使用しているコンパイラのバイナリを含むディレクトリ
アプリケーションで必要なバイナリを含むほかのディレクトリ
/usr/xpg6/bin
/usr/xpg4/bin
/usr/bin
使用しているコンパイラのバイナリを含むディレクトリ
アプリケーションで必要なバイナリを含むほかのディレクトリ
アプリケーションが execlp() または execvp() (exec(2) を参照) を使用してシェルファイルを実行するか、または system(3C) を使用する場合、そのシェルファイルを解釈するために使用されるシェルは呼び出し元が準拠する標準によって異なります:
|
機能テストマクロは、C 標準で指定されている機能セット以外で求められる追加の機能セットを示すために、アプリケーションによって使用されます。アプリケーションが特定の標準 (POSIX や X/Open CAE など) で定義されているインタフェースおよびヘッダーのみを使用する場合、そのアプリケーションは、その標準で指定されている適切な機能テストマクロを定義するだけで済みます。アプリケーションがその標準で定義されていないインタフェースおよびヘッダーを使用している場合は、適切な標準の機能テストマクロの定義に加えて、__EXTENSIONS__ も定義する必要があります。__EXTENSIONS__ を定義すると、アプリケーションには、指定された標準と競合していないすべてのインタフェースおよびヘッダーへのアクセスが提供されます。アプリケーションは、__EXTENSIONS__ をコンパイルのコマンド行か、またはアプリケーションのソースファイル内のどちらかで定義する必要があります。
1989 ANSI C、1990 ISO C、1999 ISO Cアプリケーションが C アプリケーションに準拠していることを示すためにどの機能テストマクロも定義する必要はありません。
ANSI/ISO C++ANSI/ISO C++ では、機能テストマクロが定義されていません。コンパイラのデフォルト設定とコマンド行オプションに基づいてコンパイラによって事前に定義されている標準 C++ の通知マクロ __cplusplus が 199711 以上の値に設定されている場合、コンパイラは標準に準拠したモードで動作し、C++ 標準への準拠を示します。199711 の値は ISO/IEC 14882:1998 への準拠を示します (その標準に必要です)。(上で説明したように、この標準への準拠は不完全です。)
POSIX や X/Open CAE では C++ バインディングが定義されていないため、_POSIX_SOURCE、_POSIX_C_SOURCE、_XOPEN_SOURCE などの機能テストマクロを指定すると、標準 C++ とこれらの仕様の競合する要件のためにコンパイルエラーになる場合があります。
POSIXPOSIX.1 アプリケーションに準拠するように設計されたアプリケーションは、いずれかのヘッダーをインクルードする前に、この標準で指定されている機能テストマクロを定義する必要があります。次に示されている標準の場合、アプリケーションは示されている機能テストマクロを定義する必要があります。アプリケーション作成者は、対応する標準を確認して、目的のオプションが実装によってサポートされているかどうかを確認するために照会できるほかのマクロを探す必要があります。
|
SVID3 仕様は、アプリケーションが SVID3 の要件を満たすように記述されていることを示すためにどの機能テストマクロも指定しません。SVID3 仕様は、C 標準が完成する前に記述されました。
X/Open CAEいずれかの X/Open CAE 仕様に準拠するアプリケーションを構築またはコンパイルするには、次のガイドラインに従ってください。アプリケーションに CAE 機能と POSIX 機能の両方が必要な場合、そのアプリケーションは POSIX 機能テストマクロを設定する必要はありません。
アプリケーションは、_XOPEN_SOURCE を定義する必要があります。_XOPEN_SOURCE がある値で定義されている場合、その値は 500 未満である必要があります。
アプリケーションは _XOPEN_SOURCE を定義し、_XOPEN_VERSION=4 を設定する必要があります。_XOPEN_SOURCE がある値で定義されている場合、その値は 500 未満である必要があります。
アプリケーションは、_XOPEN_SOURCE を定義し、_XOPEN_SOURCE_EXTENDED=1 を設定する必要があります。_XOPEN_SOURCE がある値で定義されている場合、その値は 500 未満である必要があります。
アプリケーションは、_XOPEN_SOURCE=500 を定義する必要があります。
アプリケーションは、_XOPEN_SOURCE=600 を定義する必要があります。
Oracle Solaris Studio 12.3 C コンパイラは、ISO/IEC 99899:1999 (1999 ISO C Language) 標準に準拠したコンパイルシステムと c99 ユーティリティーを提供します。
アプリケーションをリンクするために ld が直接使用されている場合は、そのアプリケーションが POSIX.1–2001 または SUSv3 に準拠していないかぎり、いずれかの link/load コマンド行で /usr/lib/values-xpg4.o を指定する必要があります。準拠している場合は、いずれかの link/load コンパイル行で /usr/lib/values-xpg6.o を指定する必要があります。アプリケーションをリンクするために cc または CC が使用されている場合、コンパイラは適切なファイルを自動的に追加します。ただし、次の表で説明されている方法でアプリケーションを構築することをお勧めします。
XNS4 または XNS5 に準拠したアプリケーションは、それぞれ SUS または SUSv2 に対して指定された機能テストマクロの定義に加えて、いずれかの link/load コマンド行で -l XNS をインクルードする必要があります。
コンパイラが redefine_extname プラグマ機能をサポートしている場合 (Oracle Solaris Studio 12.3 C コンパイラおよび Oracle Solaris Studio 12.3 C++ コンパイラは、この機能をサポートしていることを示すためにマクロ __PRAGMA_REDEFINE_EXTNAME を定義しています)、標準ヘッダーは、関数名をライブラリのエントリポイント名に正しくマップするために #pragma redefine_extname 指令を使用します。このマッピングによって、ISO C、POSIX、および X/Open の名前空間予約に対する完全なサポートが提供されます。
このプラグマ機能がコンパイラでサポートされていない場合、ヘッダーは、内部の関数名を適切なライブラリのエントリポイント名にマップするために #define 指令を使用します。この例では、lf64(5) のマニュアルページに示されている明示的な 64 ビットファイルオフセットシンボルは、代わりのエントリポイントを指定するために実装で使用されるため、アプリケーションではこれらの名前の使用を避けるようにしてください。
Oracle Solaris Studio 12.3 C コンパイラを使用している場合は、上に示されている仕様に準拠するアプリケーションを、次の表に示されているユーティリティーとフラグを使用してコンパイルするようにしてください:
Specification Compiler/Flags Feature Test Macros _________________________________________________________________________ 1989 ANSI C and 1990 ISO C c89 none _________________________________________________________________________ 1999 ISO C c99 none _________________________________________________________________________ SVID3 cc -Xt -xc99=none none _________________________________________________________________________ POSIX.1-1990 c89 _POSIX_SOURCE _________________________________________________________________________ POSIX.1-1990 and POSIX.2-1992 c89 _POSIX_SOURCE and C-Language Bindings Option POSIX_C_SOURCE=2 _________________________________________________________________________ POSIX.1b-1993 c89 _POSIX_C_SOURCE=199309L _________________________________________________________________________ POSIX.1c-1996 c89 _POSIX_C_SOURCE=199506L _________________________________________________________________________ POSIX.1-2001 c99 _POSIX_C_SOURCE=200112L _________________________________________________________________________ POSIX.1c-1996 c89 _POSIX_C_SOURCE=199506L _________________________________________________________________________ CAE XPG3 cc -Xa -xc99=none _XOPEN_SOURCE _________________________________________________________________________ CAE XPG4 c89 _XOPEN_SOURCE and _XOPEN_VERSION=4 _________________________________________________________________________ SUS (CAE XPG4v2) c89 _XOPEN_SOURCE and (includes XNS4) _XOPEN_SOURCE_EXTENDED=1 _________________________________________________________________________ SUSv2 (includes XNS5) c89 _XOPEN_SOURCE=500 _________________________________________________________________________ SUSv3 c99 _XOPEN_SOURCE=600
LP64 (64 ビット) プログラミング環境をサポートしているプラットフォームの場合は、XNS5 ライブラリコールを使用している SUSv2 に準拠した LP64 アプリケーションを、次の形式のコマンド行で構築するようにしてください:
c89 $(getconf XBS5_LP64_OFF64_CFLAGS) -D_XOPEN_SOURCE=500 \ $(getconf XBS5_LP64_OFF64_LDFLAGS) foo.c -o foo \ $(getconf XBS5_LP64_OFF64_LIBS) -lxnet
同様の SUSv3 に準拠した LP64 アプリケーションを、次の形式のコマンド行で構築するようにしてください:
c99 $(getconf POSIX_V6_LP64_OFF64_CFLAGS) -D_XOPEN_SOURCE=600 \ $(getconf POSIX_V6_LP64_OFF64_LDFLAGS) foo.c -o foo \ $(getconf POSIX_V6_LP64_OFF64_LIBS) -lxnetSUSv3
_XOPEN_SOURCE=600
csh(1)、ksh(1)、sh(1)、exec(2)、sysconf(3C)、system(3C)、environ(5)、lf64(5)