Oracle® Solaris 11.2 リンカーとライブラリガイド

印刷ビューの終了

更新: 2014 年 7 月
 
 

直接結合と割り込み

割り込みが発生する可能性があるのは、あるシンボルの複数のインスタンス (名前は同じ) が、プロセスに読み込まれた別々の動的オブジェクトに存在する場合です。デフォルト検索モデルでは、シンボル参照は、読み込まれた一連の依存関係で検出された最初の定義に結合されます。この場合、最初のシンボルが、同じ名前の別のシンボルに「割り込む」と言います。

直接結合は暗黙の割り込みを回避できます。参照と関連する依存関係の中で直接結合された参照を検索するとき、割り込みを有効にするデフォルトのシンボル検索モデルはバイパスされます。直接結合の環境では、同じ名前を持つ、シンボルの別々の定義に対して結合を確立できます。

同じ名前を持つ、シンボルの別々の定義に結合できるという点は、直接結合の有用な機能の 1 つです。ただし、アプリケーションが割り込みのインスタンスに依存していると、直接結合を使用した場合に、アプリケーションの期待動作が阻害される可能性があります。既存のアプリケーションで直接結合の使用を決める前に、割り込みが存在するかどうかを判断するために、アプリケーションを分析する必要があります。

アプリケーション内で割り込みが可能かどうかを判断するには、lari(1) を使用します。デフォルトでは、lari興味深い情報を表示します。この情報は、シンボル定義の複数のインスタンスから生じているため、割り込みに繋がる可能性があります。

割り込みは、シンボルの 1 つのインスタンスが結合されたときにのみ発生します。シンボルの複数のインスタンスが lari によって表示された場合には、割り込みが発生しない可能性があります。別の複数のインスタンスシンボルが存在する場合がありますが、参照されない可能性があります。これらの未参照のシンボルは引き続き割り込みの候補であり、今後のコード開発でこれらのシンボルが参照される可能性があります。多重定義されたシンボルのすべてのインスタンスについて、直接結合の使用を検討するときに分析する必要があります。

同じ名前のシンボルのインスタンスが複数存在する場合で、特に割り込みが確認された場合は、次の処理のいずれかを実行する必要があります。

  • シンボルのインスタンスをローカライズして名前空間の衝突を取り除きます。

  • 複数のインスタンスを削除して 1 つのシンボル定義を残します。

  • 割り込み要件を明示的に定義します。

  • シンボルが直接結合されないように、割り込みが発生する可能性があるシンボルを特定します。

次のセクションでは、これらの処理を詳細に説明します。