ダイナミックリンクライブラリ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
ダイナミックリンクライブラリ
拡張子 .dll
MIME Type application/x-msdownload
UTI com.microsoft.windows-​dynamic-link-library
マジックナンバー PEと同じ(オプション内フラグで区別)
開発者 マイクロソフト
包含物 共有ライブラリ
テンプレートを表示

ダイナミックリンクライブラリ (Dynamic Link Library: DLL、動的リンクライブラリ)は、ソフトウェアの一種。動的リンクを使ったライブラリのこと。

複数のプログラムから共通に利用できるように種々の機能をプログラムとは分離させた、シェアードライブラリ(共有ライブラリ)でもあることが多い。

概要[編集]

たとえば、「マウスカーソルが現在、画面上のどの座標にあるかを調べる」などという普遍性・一般性を持つ機能は、さまざまな実行プログラムアプリケーション)から参照される可能性があるが、その部分をモジュール化して、さまざまなプログラムから使えるようにすることでコードの再利用性を高め、多重開発(車輪の再発明)を防ぐことができる。このような場合に、この機能をダイナミックリンクライブラリとして実装し、アプリケーション実行プログラムの開始時に動的リンクしてから利用する方法がある。

プログラムコードを再利用する仕組みとしては、スタティックリンクライブラリを作成して静的リンクする方法が挙げられるが、ダイナミックリンクライブラリを適切に設計・利用することで、ソフトウェアの機能追加・動作変更や不具合修正などの際に、ライブラリのモジュールのみを差し替えることで対応できるなどのメリットが存在する[1]Intel IPPなどのように、実行環境のプロセッサに合わせて自動的に最適なコードを選択・実行するためにダイナミックリンクライブラリを利用している例や、NewTek LightWaveなどのように、サードパーティ製のソフトウェア部品によってエンドユーザーが本体ソフトウェアに後から自由に機能追加できるようダイナミックリンクライブラリをプラグインとして利用する設計を行なっている例もある。

Windowsにおけるダイナミックリンクライブラリのモジュールは、拡張子が「.dll」のファイルである。ActiveXコントロール(COMコンポーネントの一種)に関しては、慣例的に「.ocx」という拡張子が付けられることもある(他にも、LightWave用プラグインファイルには慣例的に「.p」の拡張子が付けられるが、Windows版におけるファイルの中身自体はWin32 DLLそのものである)。DLLは本体ソフトウェアつまり実行プログラム(「.exe」拡張子を持つモジュール)によって実行時にロードされる。Win32 APIが格納されたDLLのように高い汎用性を持つC言語形式の関数がエクスポートされたDLLのほか、Microsoft Visual C++環境専用のMFC拡張DLL、Microsoft Visual Basicなどの他言語からの利用にも対応したCOMコンポーネント、および.NET Framework環境向けのマネージコードが格納されたアセンブリなど、ひとえにDLLといってもそのモジュールの実装形態や、モジュールを利用できるプログラムには差異がある。

Unix系OSでは /usr/lib や /lib などの下に通常置かれる、拡張子が「.so」[2]のファイルである。バージョンによる差異の吸収を目的として、拡張子が「.so.バージョン番号」というファイルを実体として作成し、バージョン共通名の「.so」をその実体へのシンボリックリンクとすることが多い。


ライブラリが共有(パブリック)であることと、ダイナミックリンクであることは必ずしも一致しないので注意が必要である。ダイナミックリンクだが共有しない(特定の実行プログラムからのみ使用されるプライベートなモジュール)というライブラリもありうる。

一般には、ダイナミックリンクライブラリでも、シンボル(関数シンボル)は実行プログラムファイルの生成時(コンパイル後のリンク&ビルド処理時)に解決する(アーリーバインド)。これに対し、エンドユーザーが後からモジュールを追加できるプラグインなどでは、実行時にシンボルを解決するものもある(ディレイロード)。多くの処理系では実装上両者は同じものだが[要出典]、例えばDarwinでは明確に区別されている。

脚注[編集]

  1. ^ DLL の利点 - MSDN
  2. ^ 「so」は「Shared Object」の略。

関連項目[編集]