共有ライブラリ
別名:シェアードライブラリ
【英】shared library
共有ライブラリとは、複数のプログラムが共通して利用する汎用性の高いプログラムの部品の集まりのことである。UNIX系のOSでは「.so.(バージョン番号)」という拡張子のファイルとして、また、Windowsの場合は「.DLL」という拡張子のファイルとして提供される。
コンピュータで作動するプログラムは、もともといくつかの部品が組み合わさって構成されている。そのなかには、同じ部品も含まれているため、あらかじめ、同じ部品をコンピュータのなかのひとつの場所に集めておくことで、複数のプログラムがその部品を共有して使うことが可能になる。また、シェアードプログラムにより、プログラムを作成する開発者も、既にある部品を、再度作成する必要がなくなるため、よりスムーズに開発を行うことができる。
共有ライブラリ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/03/30 07:47 UTC 版)
「Executable and Linkable Format」の記事における「共有ライブラリ」の解説
共有ライブラリにも対応しており、しかるべき属性のセグメント内にある、Procedure Location Tableや、Global Offset Tableを利用して、間接的に参照することになる。
※この「共有ライブラリ」の解説は、「Executable and Linkable Format」の解説の一部です。
「共有ライブラリ」を含む「Executable and Linkable Format」の記事については、「Executable and Linkable Format」の概要を参照ください。
共有ライブラリ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/01 06:34 UTC 版)
動的か静的かとは別に、ライブラリはプログラム間で共有される方式でも分類される。動的ライブラリは何らかの共有をサポートしており、複数のプログラムが同時に同じライブラリを使用することができる。静的ライブラリは各プログラムにリンクされるため、共有することはできない。 共有ライブラリ(英: shared library)はやや曖昧な用語であり、ふたつの概念を含む。第一はディスク上のコードを複数の無関係なプログラムが共有することを意味する。第二の概念はメモリ上のコードの共有であり、ライブラリのロードされた物理メモリページが複数のプロセスのアドレス空間にマップされ、同時にアクセスされることを意味する。一般に後者を共有ライブラリと称するのが推奨され[要出典]、この方式には様々な利点がある。例えばOPENSTEPでは、アプリケーションの多くは数百Kバイトで即座にロード可能であり、その機能の大部分はライブラリ上に実装されていて、共有可能であるためにOSが別のプログラム用にメモリにロードしたコードイメージがそのまま使用できる。しかし、マルチタスク環境で共有されるコードは特別な配慮が必要であり、そのために性能が若干低下する。 メモリ上の共有ライブラリはUNIXでは位置独立コード (PIC) を使って実現される。これは柔軟なアーキテクチャだが複雑であり、Windowsなどでは使われていない。Windowsなどは、DLL毎にマップすべきアドレスを事前に決めておくなどしてメモリ上で共有可能にしている。WindowsのDLLはUNIXから見れば共有ライブラリではない。(訳注:UNIXでもライブラリのマップすべきアドレスを決めている場合がある。ただしそれは性能向上目的であり、基本的にはPIC化されている。) 最近[いつ?]のOSでは共有ライブラリは通常の実行ファイルと同じ形式になっている。これにはふたつの利点がある。第一はひとつのローダで両方をロードできる。それによってローダが若干複雑化するが、十分コストに見合う程度である。第二はシンボルテーブルさえあれば実行ファイルを共有ライブラリとして使うことができる点である。このようなファイル形式として、ELF (UNIX) と PE (Windows) がある。また、Windowsではフォントなどのリソースも同じファイル形式になっている。OPENSTEPでもほとんど全てのシステムリソースが同じファイル形式になっている。 DLLという用語はWindowsやOS/2で主に使われる。UNIXでは「共有ライブラリ」が一般的である。 マルチスレッド環境下でライブラリを使用するにあたっては、別の共有問題が発生する。ライブラリルーチンがデータ領域としてスタックのみを使う場合は問題ないが、ライブラリ内のデータ領域を使う場合、そのデータ領域がスレッド毎に用意されていないことが多い。したがって、そのようなライブラリルーチンを使う場合、実行ファイル側で同時に複数のスレッドが同じライブラリルーチンを使わないように注意しなければならないことがある。
※この「共有ライブラリ」の解説は、「ライブラリ」の解説の一部です。
「共有ライブラリ」を含む「ライブラリ」の記事については、「ライブラリ」の概要を参照ください。
- 共有ライブラリのページへのリンク