Solaris Studio 12 x86に関するページ

Oracle(旧Sun) Solaris OS用の開発環境です。無償で利用可能です。

入手

入手ファイル

Oracle Solaris Studio のページから[Download]タブを選択し、Oracle Solaris Studio OTN Developer License Agreementに同意するにチェックを付けます。無償で登録できるOracle Technology Networkのログインが要求されるので、ログインします。

2010年9月14日現在、Ver.12.2が提供されています。

OTN Developer License Agreementによると、開発・テストを含む組織内のビジネス運営(internal business operations, including the development and testing)が該当します。

Solaris Studio 12のインストール

インストール実施

まず、SolarisStudio12.2-solaris-x86-pkg-ML.tar.bz2を展開します。

# gtar xjf SolarisStudio12.2-solaris-x86-pkg-ML.tar.bz2
# ls SolarisStudio12.2-solaris-x86-pkg-ML
LEGAL                           OSS12.2_README-pkgs.txt                  patches
OSS12.2_README-pkgs-ja.html     SolarisStudio12.2-solaris-x86-pkg-ML.sh
OSS12.2_README-pkgs-zh_CN.html  install_patches.sh
#

そして、インストーラをGUI環境用で実行します。

# ./SolarisStudio12.2-solaris-x86-pkg-ML.sh

必要なパッチが適用されていないとインストール画面にパッチをインストールするボタンが表示されます。インターネットに接続している環境では、パッチがインストールされ、インストールが続行できます。

利用設定

ユーザ環境

Solaris Stuidoはデフォルトで/opt/solstudio12.2にインストールされますが、主要なコマンドは/usr/bin/にシンボリックが作成されています。(CC、c++filt、cc、dmake、lint、・・・)

ただし、すべてのコマンドではないので、必要であれば、/opt/solstudio12.2/binをPATHに追加した方がよいでしょう。

開発ツール

リンカ関係

dumpstabsコマンド

ELF形式の実行ファイル(共有ライブラリファイル)の情報を見ることができます。(/usr/ccs/bin/nmコマンドでもシンボル情報は見れます)

情報の中には、コンパイラのバージョン(パッチID)、コンパイルオプションが含まれています。

その他メモ

エラー関連

__rwstd::InterlockedDecrement / __rwstd::InterlockedIncrement が未定義

たまに実行時にこのエラーが出ることがありました。原因・解決方法は未定です。

この関数はどちらもlibCstdにて定義されているもので、発生した場合に以下の試行錯誤が有効な場合があります。

C/C++プラットフォーム定義(define)関係

定義一覧

Sun C++コンパイラ固有の定義
__ARRAYNEW
-features=[no%]arraynew指定で制御される定義。(標準モードでは指定不可)
__BOOL
-features=[no%]bool指定で制御される定義。
未定義:-features=no%bool指定時
1:-features=bool指定時(デフォルト)
__BUILTIN_VA_ARG_INCR
varargs.h, stdarg.h, sys/varargs.hに関連
__cplusplus
(ISO C/C++規格の適合性に関する定義に記載)
__DATE__
(要調査)
__FILE__
(要調査)
__LINE__
(要調査)
__STDC__
(ISO C/C++規格の適合性に関する定義に記載)
__sun
(要調査)
sun
(要調査)
__SUNPRO_CC
0x580に設定
__SUNPRO_CC_COMPAT
-compat[={4|5}]指定で制御される定義。
4:-compat=4指定時
5:-compat=5指定時(コンパイラのデフォルト)
__i386
x86
i386
(要調査)+pが使用されていると未定義
__REENTRANT
-mtオプションを指定を付けると定義される。
ISO C/C++規格、POSIX、XOPEN規格の適合性に関する定義
_POSIX_C_SOURCE
POSIX完全準拠のアプリケーションをコンパイルする際に指定する必要がある。POSIX規格以外の型定義・関数の使用を排除することになる。
未定義:非POSIX互換
1:POSIX.1-1990互換
2:POSIX.2-1992互換
199309L:POSIX.1b-1993互換(リアルタイム)
199506L:POSIX.1c-1995互換(POSIXスレッド)
200112L:POSIX.1-2001互換(Austin Group版)
<sys/feature_test.h>において、ユーザーが未定義のときは1が設定される。
socket APIを使用するアプリケーションで_POSIX_C_SOURCE=199506Lを指定する場合、__EXTENSIONS__も定義しないと、socket APIがPOSIX規格外なので問題になる(らしい)。
__XOPEN_OR_POSIX
<sys/feature_test.h>において、_XOPEN_SOURCEまたは_POSIX_C_SOURCEが定義されていると定義される
_STRICT_STDC
<sys/feature_test.h>において、__STDC__が1のとき定義される
_STDC_C99
<sys/feature_test.h>において、__STDC_VERSIONが199901L(C99規格)以上のとき定義される
__STDC__
未定義:ISO/IEC C規格に非適合(-Xs : K&R)
0:ISO/IEC C規格外の拡張を許している場合(-Xa : デフォルト, -Xt : transitional)
1:ISO/IEC C規格に厳密に適合している場合(-Xc : strictly conforming)
__STDC_VERSION__
ISO/IEC C95以降の規格で追加された定義。
未定義:ISO C規格に非対応
1:C90規格に対応
199409L:C90:AMD1規格に対応
199901L:C99規格に対応
__SUNPRO_C
Sun Cコンパイラのバージョン識別。16進3桁でバージョン番号を識別。0xVRP
V:バージョン、R:リビジョン、P:パッチ。例)0x580 => 5.8
__SUNPRO_CC
Sun C++コンパイラのバージョン識別。書式は__SUNPRO_Cと同一。
__SUNPRO_CC_COMPAT
Sun C++コンパイラ互換モード種類の識別。
4 : ARM準拠
5 : ISO規格
__sun
Sunコンパイラの場合定義される。
__i386
Intelアーキテクチャのコード生成時に定義される
__cplusplus
1 : ARM互換モード(SunC++コンパイラの-compat=4指定時)
199711L : ISO規格モード
_XOPEN_SOURCE
500未満:XPG3、XPG4、XPG4v2
500:SUSv2(XPG5)
600:SUSv3(XPG6)
_XOPEN_VERSION
4:XPG4

Solaris 10

Solaris 10は、IEEE 1003.1、IEEE 1003.2をサポートしています。以下の定義が含まれます。
POSIX.1-1990, POSIX.1b-1993, POSIX.1c-1996, POSIX.2-1992, POSIX.2a-1992更新
また、X/Open共通アプリケーション環境ポータビリティガイドのXPG3, XPG4, XPG4v2, シングルUNIX仕様SUSv2(XPG5), SUSv3(XPG6), XNS4, XNS5をサポートしています。

SUS:Single UNIX Specification。XPG4の後継。

UNIXの標準化の歴史には、IEEEによるPOSIXの流れ、The Open GroupによるX/Openの流れ、ISO/IECの規格と3系統がありましたが、これら3つの団体が共同で統一標準を出すに至り、ようやく1つのUNIX標準が規定されるようになりました。

X/Open

The Open Groupが規定しているUNIX標準仕様。

X/Open Portability Guide, Issue 3 : XPG3
    SVID3のユーティリティを含むPOSIX.1-1988のスーパーセット
X/Open CAE Specification, Issue 4: XPG4
    XPG3に加えてPOSIX.1-1990、POSIX.2-1992、POSIX.2a-1992
X/Open CAE Specification, Issue 4, Version 2: XPG4v2
    UNIX 95 (SUS or SUSv1)
    BSDインタフェースを含むXPG4のスーパーセット
X/Open CAE Specification, Issue 5: XPG5
    UNIX 98 (SUSv2)
    SUSの拡張(POSIX.1b-1993、POSIX.1c-1996、ISO/IEC 9899 Amendment 1)
Open Group Technical Standard, Issue 6: XPG6
    SUSv3
    IEEE Std. 1003.1-2001 and ISO/IEC 9945:2002
    この規格は、X/OpenとPOSIX規格の融合であり、POSIX.1-2001と同一

X/Open規格に対応するアプリケーションのコンパイルオプション指定
規格 アプリケーションで指定するマクロ定義 システム内部で使用するマクロ 備考
XPG3
_XOPEN_SOURCE
_XPG3
_XOPEN_SOURCEマクロの値は500未満
XPG4
_XOPEN_SOURCE && _XOPEN_VERSION=4
_XPG4
XPG4v2
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED=1
_XPG4_2
XPG5
_XOPEN_SOURCE=500
_XPG5
XPG6
_XOPEN_SOURCE=600 または POSIX_C_SOURCE=200112L
_XPG6

POSIX

Portable Operating System Interface for UNIXの略。米国電気電子学会(IEEE)で規定している、UNIX系のOSの共通仕様。システムコール(API)だけでなく、コマンド、ディレクトリ等についても規定している。

IEEE Std 1003.1-1990(POSIX.1)
POSIX
IEEE Std 1003.2-1992(POSIX.2)
コマンドとユーティリティ。ISO/IEC 9945-2:1993として承認。
IEEE Std 1003.1b-1993(POSIX.1b)
リアルタイム機能。ISO/IEC 9945-1:1996として承認。
IEEE Std 1003.1c-1995(POSIX.1c)
POSIXスレッド。
IEEE Std 1003.1c-1999(POSIX.1d)
追加のリアルタイム拡張。
IEEE Std 1003.1g-2000(POSIX.1g)
ソケットを含むネットワークAPI。
IEEE Std 1003.1-1996(POSIX.1-1996)
POSIX.1の1996年改訂版。POSIX.1bとPOSIX.1cを取り込んでいる。
IEEE Std 1003.1-2001
IEEE, ISO/IEC, The Open Groupの3団体共通仕様として定義。従来の1003.1と1003.2を含む仕様となっている。

何を定義すべきか?

POSIXスレッドを使うアプリケーション

アンインストール