ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
プログラミングインタフェースガイド Oracle Solaris 10 1/13 Information Library (日本語) |
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 バージョンのうちのいずれかのバイナリに変換されます。バージョンは次のとおりです。
32 ビット SPARC
64 ビット SPARC
32 ビット x86
64 ビット x86 (Opteron)
ABI は API とよく似ていますが、ソースをコンパイルするプロセスにいくつかの重要な違いがあります。
コンパイラ指令 (#define など) はソースレベルの構成を変更または置換する可能性があります。結果として、ソースに存在していたシンボルがバイナリに存在しなかったり、ソースに存在していなかったシンボルがバイナリに存在することがあります。
コンパイラはプロセッサ固有のシンボル (算術命令など) を生成することがあり、ソースレベルの構成を変更または置換する可能性があります。
コンパイラのバイナリレイアウトは、そのコンパイラと、コンパイラが受け入れるソース言語のバージョンに固有になることがあります。このような場合、同じコードを異なるコンパイラでコンパイルすると、互換性のないバイナリが生成される可能性があります。
このような理由のため、異なる Solaris リリースでコンパイルした場合、ソースレベル (API) では互換性があっても、バイナリレベルでは十分な互換性を得られません。
Solaris ABI は、オペレーティングシステムが提供する、サポートされるインタフェースから構成されます。システムで利用できるインタフェースの中には、オペレーティングシステムが排他的に使用することを目的としているインタフェースもあります。このような排他的なインタフェースは、アプリケーションでは使用できません。SunOS 5.6 より前のリリースでは、アプリケーション開発者は Solaris ライブラリのすべてのインタフェースを利用できていました。Solaris リンクエディタのライブラリシンボル有効範囲の手法を使用すると、ライブラリの外では使用する予定がないインタフェースの有効範囲をライブラリのローカルだけに縮小できます。詳細は、『リンカーとライブラリ』を参照してください。ただし、システム要件のため、必ずしもすべての非公開インタフェースがこのように有効範囲を縮小できるわけではありません。このようなインタフェースには「private」というラベルが付いてあり、Solaris ABI には含まれていません。