プログラミングインタフェース

Solaris ABI の定義

Solaris ABI は Solaris ライブラリで定義されています。このような定義は、リンクエディタと実行時リンカーで使用されるライブラリバージョンの手法と方針によって行われます。

Solaris ライブラリにおけるシンボルバージョン管理

Solaris リンクエディタと実行時リンカーは、2 種類のライブラリ管理 (ファイルバージョン管理とシンボルバージョン管理) を使用します。ファイルバージョン管理では、ライブラリの名前にバージョン番号が (libc.so.1 のように) 追加されます。このようなライブラリにある 1 つまたは複数の公開インタフェースに互換性のない変更を行うと、バージョン番号は (libc.so.2 のように) インクリメントされます。 動的にリンクされるアプリケーションでは、構築時にバインドしたシンボルが実行時にライブラリに存在しないことがあります。シンボルバージョン管理では、Solaris リンカーはシンボルのセットに名前を関連付けます。Solaris リンカーは次に、実行時のリンク中、その名前がライブラリに存在するかどうかを確認して、関連付けたシンボルが存在することを検証します。

ライブラリシンボルバージョン管理では、シンボルのセットにシンボルバージョン名を関連付け、その名前に番号付けスキーマがある場合は、マップファイルを使用して番号を関連付けます。次の例は、架空の Sun ライブラリ libfoo.so.1 のマップファイルです。

        SUNW_1.2 {
            global:
                symbolD;
                symbolE
        } SUNW_1.1;

        SUNW_1.1 {
            global:
                symbolA;
                symbolB;
                symbolC;
        };

        SUNWprivate {
            global:
                __fooimpl;
            local: *;
        };

このマップファイルでは、symbolAsymbolB、および symbolC がバージョン SUNW_1.1 に関連付けられ、symbolD および symbolESUNW_1.2 に関連付けられ、SUNW_1.2SUNW_1.1 に関連付けられたすべてのシンボルを継承しています。シンボル __fooimpl は、継承チェーンを持たない異なる名前付きセット SUNWprivate に関連付けられています。

構築時、リンクエディタはアプリケーションが使用しているシンボルを調査します。リンクエディタは次に、これらのシンボルが依存しているアプリケーションにセット名を記録します。(番号付け継承) チェーンを持っているセットの場合、リンクエディタは、アプリケーションが使用するすべてのシンボルが含まれる最小限の名前付きセットを記録します。たとえば、アプリケーションが symbolA および symbolB だけを使用する場合、リンクエディタは SUNW_1.1 への依存関係を記録します。また、アプリケーションが symbolAsymbolB、および symbolD を使用する場合、SUNW_1.2SUNW_1.1 を取り込んでいるため、リンクエディタは SUNW_1.2 への依存関係を記録します。

実行時、リンカーは、依存関係としてアプリケーションに記録されたバージョン名がリンクされるライブラリに存在しているかどうかをチェックします。このプロセスによって、必要なシンボルが存在しているかどうかをすばやく確認できます。詳細は、『リンカーとライブラリ』を参照してください。


注 –

マップファイル内の「local:*」指令は、明示的に名前付きセットに関連付けられていないライブラリ内のシンボルは、その有効範囲がライブラリにローカルであることを意味します。つまり、このように有効範囲がローカルに制限されたシンボルはライブラリの外からは見えないことを意味します。この規約は、シンボルが見えるのは、シンボルバージョン管理名に関連付けられているときだけであることを保証します。


シンボルバージョン管理による Solaris ABI へのラベル付け

ライブラリ内のシンボルのうち、表示できるシンボルはなんらかの名前付きセットに属しているので、名前付けスキーマを使用すると、シンボルの ABI 状態にラベルを付けることができます。このラベル付けを行うには、すべての非公開インタフェースを SUNWprivate から始まるセット名に関連付けます。公開インタフェースはほかの名前から始まり、特に、次のような名前があります。

このような公開名前付きセットには major.minor の番号付けスキーマによって番号が付けられます。minor 番号は、新しいシンボルが名前付きセットに追加されるたびにインクリメントされます。既存のシンボルに互換性のない変更が行われたときにそのシンボルが含まれるセットの major 番号がインクリメントされます。既存のシンボルに互換性のない変更が行われたときは、ライブラリのファイル名のバージョン番号もインクリメントされます。

したがって、Solaris ライブラリ ABI の定義はライブラリに含まれており、SUNWprivate から始まらないシンボルバージョン名に関連付けられたシンボルセットから構成されます。pvs コマンドは、ライブラリ内にあるシンボルの一覧を表示します。