What Are Dynamic Libraries?
アプリの機能のほとんどは、実行可能コードのライブラリに実装されています。 アプリが静的リンカーを使用してライブラリとリンクされると、アプリが使用するコードは生成された実行可能ファイルにコピーされます。 スタティックリンカーは、オブジェクトコードと呼ばれるコンパイル済みのソースコードとライブラリコードを1つの実行可能ファイルにまとめ、実行時にその全体がメモリにロードされます。 アプリの実行ファイルの一部となるライブラリの種類は、スタティック・ライブラリと呼ばれます。 スタティック ライブラリは、オブジェクト ファイルのコレクションまたはアーカイブです。
アプリが起動されると、アプリのコード (リンクされたスタティック ライブラリのコードを含む) がアプリのアドレス空間にロードされます。 多くの静的ライブラリをアプリにリンクすると、アプリの実行可能ファイルが大きくなります。 図1は、静的ライブラリで実装された機能を使用するアプリのメモリ使用量を示しています。 実行ファイルのサイズが大きいアプリケーションは、起動に時間がかかり、メモリ使用量も大きくなります。 また、スタティック・ライブラリがアップデートされた場合、そのクライアント・アプリはスタティック・ライブラリの改良の恩恵を受けることができません。 改善された機能を利用するには、アプリの開発者がアプリのオブジェクト・ファイルを新しいバージョンのライブラリとリンクさせる必要があります。 そして、アプリのユーザーは、アプリのコピーを最新バージョンに置き換える必要があります。 したがって、静的ライブラリによって提供される最新の機能でアプリを最新に保つには、開発者とエンド ユーザー両方による破壊的な作業が必要です。
Better approach is for an app to load code into its address space when it’s actually needed, either at launch time or at runtime. この柔軟性を提供するライブラリの種類は、ダイナミック ライブラリと呼ばれます。 ダイナミック・ライブラリは、クライアント・アプリに静的にリンクされることはなく、実行ファイルの一部になることもない。
図 2 は、一部の機能を静的ライブラリとしてではなく動的ライブラリとして実装することにより、起動後にアプリが使用するメモリを削減する方法を示しています。
Using dynamic libraries, they link to the libraries is static, not dynamic because the programs can benefit to the improvements to their use the libraries automatically. つまり、アプリケーション開発者がアプリケーションを再コンパイルしなくても、クライアント アプリケーションの機能を改善および拡張することができるのです。 OS Xのシステムライブラリはすべて動的ライブラリなので、OS Xで書かれたアプリはこの機能を利用できる。 これは、Carbon または Cocoa テクノロジーを使用するアプリが OS X の改善の恩恵を受ける方法です。
動的ライブラリのもう 1 つの利点は、ロード時に初期化でき、クライアント アプリが正常に終了したときにクリーンアップ タスクを実行できることです。 静的ライブラリには、このような機能はありません。 詳細は、モジュールのイニシャライザーとファイナライザーを参照してください。
動的ライブラリの開発で開発者が留意しなければならない問題の 1 つは、ライブラリが更新されたときにクライアント アプリケーションとの互換性を維持することです。 ライブラリはクライアント アプリケーションの開発者が知らないうちに更新されることがあるため、アプリケーションはコードを変更せずにライブラリの新バージョンを使用できるようにしなければなりません。 そのため、ライブラリのAPIは変更されるべきではない。 しかし、改良によってAPIの変更が必要になる場合もある。 その場合、クライアントアプリが正しく動作するためには、ユーザーのコンピューターに旧バージョンのライブラリが残っている必要がある。 ダイナミック ライブラリ設計ガイドラインでは、ダイナミック ライブラリの進化に伴うクライアント アプリとの互換性の管理というテーマについて説明しています
。