リンカーとライブラリ

同じプロセス内の複数の外部バージョン管理ファイル

外部的にバージョン管理された新しい共有オブジェクトを作成することは、大きな変更です。外部的にバージョン管理された一連の共有オブジェクトのメンバーを使用するすべてのプロセスの依存関係を、完全に理解している必要があります。

たとえば、あるアプリケーションが、libfoo.so.1 および外部から記述されたオブジェクト libISV.so.1 と依存関係があるとします。この後者のオブジェクトは libfoo.so.1 とも依存関係があるとします。新しいインタフェース libfoo.so.2 を使用するように、アプリケーションを再設計する可能性があります。ただし、アプリケーションが外部オブジェクト libISV.so.1 を使用することは変更しない可能性があります。実行時に読み込まれる libfoo.so 実装の可視性のスコープに応じて、主要なバージョンのファイルが両方とも実行プロセスに含まれます。libfoo.so のバージョンを変更する理由は、互換性のない変更をマークすることだけです。つまり、プロセス内にオブジェクトの両方のバージョンを持つことは、不正なシンボル結合が発生する原因となり、そのために望ましくない相互作用を引き起こすことがあります。

インタフェースに互換性のない変更を行うことは避けるようにしてください。互換性のない変更は、インタフェース定義およびインタフェース定義を参照するすべてのオブジェクトを完全に制御できる場合に限って検討することをお勧めします。