JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
リンカーとライブラリ     Oracle Solaris 10 8/11 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  Oracle Solaris リンカーの紹介

2.  リンカー

3.  実行時リンカー

4.  共有オブジェクト

5.  アプリケーションバイナリインタフェースとバージョン管理

6.  サポートインタフェース

7.  オブジェクトファイル形式

8.  スレッド固有領域 (TLS)

9.  mapfile

A.  リンカーのクイックリファレンス

B.  バージョン管理の手引き

命名規約

共有オブジェクトのインタフェースの定義

共有オブジェクトのバージョンアップ

既存の (バージョンアップされていない) 共有オブジェクトのバージョンアップ

バージョンアップ共有オブジェクトの更新

新しいシンボルの追加

内部実装の変更

新しいシンボルと内部実装の変更

標準インタフェースへのシンボルの併合

C.  動的ストリングトークンによる依存関係の確立

D.  直接結合

E.  System V Release 4 (バージョン 1) Mapfile

F.  リンカーとライブラリのアップデートおよび新機能

索引

共有オブジェクトのバージョンアップ

共有オブジェクトの使用可能インタフェースを決定して、mapfile とリンカーの -M オプションを使用すれば、対応するバージョン定義を作成できます。この mapfile 構文の概要については、「SYMBOL_SCOPE/SYMBOL_VERSION 指令」を参照してください。

次の例は、共有オブジェクト libfoo.so.1 にベンダー公開インタフェースを定義します。

$ cat mapfile
$mapfile_version 2
SYMBOL_VERSION SUNW_1.1 {                   # Release X.
        global:
                foo2;
                foo1;
        local:
                *;
};
$ cc -G -o libfoo.so.1 -h libfoo.so.1 -z text -M mapfile foo.c

ここで、大域シンボル foo1foo2 は、共有オブジェクトの公開インタフェース SUNW_1.1 に割り当てられています。入力ファイルから提供されたほかの大域シンボルはすべて、自動縮小指令「*」によってローカル範囲に縮小されています。「シンボル範囲の縮小」を参照してください。


注 - 各バージョン定義の mapfile エントリには、更新のリリースまたは日付を反映するコメントを付けてください。この情報は、たとえば複数の開発者によって行なわれた 1 つのオブジェクトに対する複数の変更を 1 つのバージョン定義にまとめて、ソフトウェア製品の一部として共有オブジェクトを配布するのに適切なものに調整するときに役立ちます。


既存の (バージョンアップされていない) 共有オブジェクトのバージョンアップ

既存のバージョンアップされていない共有オブジェクトをバージョンアップするには、特に注意が必要です。これは、以前のソフトウェアリリースで配布された共有オブジェクトが、その大域シンボルのすべてを、ほかのものと結合できるようにしているためです。共有オブジェクトの意図したインタフェースを判定できる可能性はありますが、ほかのユーザーが発見して別のシンボルに結合した可能性もあります。したがって、シンボルを削除すると、新しくバージョンアップされた共有オブジェクトの配布時にアプリケーションに障害が生じる場合があります。

既存のバージョンアップされていない共有オブジェクトの内部バージョンアップは、既存アプリケーションを破壊することなく、インタフェースを判定して適用できる場合に実現できます。実行時リンカーのデバッグ機能は、各種のアプリケーションの結合要件を検査するために役立ちます。「機能のデバッグ」を参照してください。ただし、この既存結合要件の判定は、共有オブジェクトを使用するすべてのプログラムがわかっているということを前提としています。

既存のバージョンアップされていない共有オブジェクトの結合要件を判定できない場合は、新しいバージョンアップ名を使用して、新しい共有オブジェクトファイルを作成する必要があります。「バージョン管理ファイル名の管理」を参照してください。すべての既存アプリケーションの依存関係を満たすには、この新しい共有オブジェクトだけでなく、元の共有オブジェクトも配布する必要があります。

元の共有オブジェクトの実装を一切変更しない場合は、共有オブジェクトのバイナリをそのまま配布するだけで十分でしょう。ただし、元の共有オブジェクトを更新する必要がある場合は、代替ソースツリーから共有オブジェクトを作り直した方が適切な場合があります。実装は新しいプラットフォームとの互換性を保つ必要があるので、更新はパッチで行う必要があります。