Solaris ABI とは、アプリケーションが Solaris オペレーティングシステムで利用できる (つまり、サポートされる) 実行時インタフェースセットのことです。ABI のもっとも重要な構成要素は次のとおりです。
Solaris システムライブラリが提供するインタフェース (マニュアルページの 3 章を参照)
Solaris カーネルシステムコールが提供するインタフェース (マニュアルページの 2 章を参照)
さまざまなシステムファイルとシステムディレクトリの場所と形式 (マニュアルページの 4 章を参照)
Solaris ユーティリティーの入出力用の構文と意味論 (マニュアルページの 1 章を参照)
Solaris ABI の中心となる構成要素はシステムライブラリインタフェースセットです。この章では、「ABI」という用語はこのような構成要素だけを指します。Solaris オペレーティングシステムがインタフェースを提供するのは C 言語だけであるので、この ABI が持っているのも C 言語用のインタフェースだけです。
Solaris API (Application Programming Interface) 向けに作成された C ソースコードは C コンパイラによって 4 つの ABI バージョンのうちのいずれかのバイナリに変換されます。4 つのバージョンは次のとおりです。
32 ビット SPARC
64-bit SPARC
32-bit x86
64–bit x86 (Opteron)
ABI は API とよく似ていますが、ソースをコンパイルするプロセスに次のようにいくつかの重要な違いがあります。
コンパイラ指令 (#define など) はソースレベルの構成を変更または置換する可能性があります。結果として、ソースに存在していたシンボルがバイナリに存在しなかったり、ソースに存在していなかったシンボルがバイナリに存在することがあります。
コンパイラはプロセッサ固有のシンボル (算術命令など) を生成することがあり、ソースレベルの構成を変更または置換する可能性があります。
コンパイラのバイナリレイアウトは、そのコンパイラと、コンパイラが受け入れるソース言語のバージョンに固有になることがあります。このような場合、同じコードを異なるコンパイラでコンパイルすると、互換性のないバイナリが生成される可能性があります。
このような理由のため、異なる Solaris リリースでコンパイルした場合、ソースレベル (API) では互換性があっても、バイナリレベルでは十分な互換性を得られません。
Solaris ABI は、オペレーティングシステムが提供する、サポートされるインタフェースから構成されます。システムで利用できるインタフェースの中には、オペレーティングシステムが排他的に使用することを目的としているインタフェースもあります。このような排他的なインタフェースは、アプリケーションでは使用できません。SunOS 5.6 より前のリリースでは、アプリケーション開発者は Solaris ライブラリのすべてのインタフェースを利用できていました。Solaris リンクエディタのライブラリシンボル有効範囲の手法を使用すると、ライブラリの外では使用する予定がないインタフェースの有効範囲をライブラリのローカルだけに縮小できます。詳細は、『リンカーとライブラリ』を参照してください。ただし、システム要件のため、必ずしもすべての非公開インタフェースがこのように有効範囲を縮小できるわけではありません。このようなインタフェースには「private」というラベルが付いてあり、Solaris ABI には含まれていません。