動的リンクとは? わかりやすく解説

動的リンク

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/25 17:04 UTC 版)

動的リンクどうてきりんく英語: dynamic link)とは二つの意味がある。




「動的リンク」の続きの解説一覧

動的リンク

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/03/12 21:29 UTC 版)

リンケージエディタ」の記事における「動的リンク」の解説

動的リンクは、リンク時ライブラリ参照を名前のみで解決してプログラム作る方法出来上がったプログラムにはライブラリ部分プログラム含まれないのが特徴である。そのプログラム実行時にライブラリ空間上の実際プログラム結合し実行する(この作業通常ローダ呼ばれるプログラムが行う)。出来上がったプログラム大きさ小さくなるプログラム再度リンクしなくてもライブラリだけ入れ替えることができるなどの利点があり、現在広く使われている。 C言語標準ランタイムライブラリのような汎用ライブラリは動的リンクするものの、ユーザー定義のライブラリ静的リンクする、あるいは汎用ライブラリ静的リンクするものの、ユーザー定義のライブラリは動的リンクする、両方動的リンクする、両方静的リンクする、といった組み合わせがあり、用途によって使い分けることもある。

※この「動的リンク」の解説は、「リンケージエディタ」の解説の一部です。
「動的リンク」を含む「リンケージエディタ」の記事については、「リンケージエディタ」の概要を参照ください。


動的リンク

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/01 06:34 UTC 版)

ライブラリ」の記事における「動的リンク」の解説

動的リンク (英: dynamic linking) は、あるライブラリ内のデータコードを含む)を新たな実行ファイルビルド時にコピーすることはなく、ディスク上に別のファイルとして存在している。ビルド時にリンカが行うのは、その実ファイルが必要とするのがどのライブラリのどの部分であるか(関数名インデックス)を記録するだけである。リンク作業大部分はそのアプリケーションメモリ上にロードされたときか、実行時である。リンクを行うプログラムコードローダ(英: loader)と呼ばれ実際にオペレーティングシステム (OS) の一部見なされる適当な時点ローダ必要なライブラリディスク上で見つけてプロセスメモリ空間に(追加データ空間と共にマッピングする。OSによってはプロセス実行開始する前でないとライブラリをリンクできないものもあるが、多くOSではプロセス実行時に実際にライブラリ参照したときにリンクできる。後者は「遅延読み込み」などと呼ばれる。どちらの場合ライブラリ動的リンクライブラリ(ダイナミックリンクライブラリ)と呼ばれるWindows環境では動的リンクライブラリの略称でもある「DLL」という呼び方一般的であり、動的ライブラリファイル拡張子通例 .dll である。動的リンクライブラリの中でもシステム上の複数実行プログラムによって共有再利用されうるものを、共有ライブラリシェアードライブラリ)と呼ぶ。 ローダの処理は、メモリ上のライブラリ位置実際にロードされるまで確定しないため、ちょっとしたトリックを必要とする。ディスク上のファイル内に絶対アドレス書きこんでおくことはDLLであっても不可能である。理論的にメモリロードされたときにライブラリ参照している部分全て書き換え正しメモリ上の位置参照するようにすることはできるが、それによって消費される時間メモリ無視できないその代わり多く動的リンクシステムではアドレス空欄となったシンボルテーブルコンパイル時に用意するライブラリへの参照全てこのシンボルテーブル経由して行われるコンパイラシンボルテーブルからアドレス取り出して使うコード生成する)。メモリロードされたとき、ローダがこのテーブル書き換えるライブラリも全メソッド関数サブルーチン)のテーブル持っているライブラリ入ってくるときは、このテーブル経由してルーチンジャンプする。これによってライブラリのルーチンコールにオーバーヘッド発生するが、通例それは無視できるほど小さい。 動的リンカ・ローダは機能面様々なものがある。いくつかの場合実行ファイル格納され明示的なライブラリパスに依存しライブラリ名やディスク上の配置変更するシステム作動できなくなる。より一般的な手法としてはライブラリ名だけを実行ファイル格納しOS何らかのアルゴリズムディスク上のライブラリ検索するUnix系システムでは、ライブラリ探す場所(ディレクトリ)を構成ファイルリストアップしておく。ライブラリ開発者はそこに書かれディレクトリライブラリ配置することを推奨される。しかし、この方法では新しライブラリインストールする際に問題発生しやすく、共通のディレクトリあまりにも多くライブラリ置かれることとなって管理難しくする。Windowsではレジストリ使ってCOMコンポーネントActiveX DLLの場所を決めているが、標準DLLでは、 アプリケーションの実行ファイル存在するディレクトリ SetDllDirectory()指定されるディレクトリWindows XP SP1以降サポート) システムディレクトリ (NT系ではSystem32) 16ビットシステムディレクトリ (System) Windowsディレクトリ カレントディレクトリ PATH環境変数示されるディレクトリ探す(古いバージョンではカレントディレクトリ2番目だった)。OPENSTEPはもっと柔軟なシステム使用していて、ライブラリ探索リスト保持している。しかし不正なDLL探索の上位に置かれていると実行ファイルは不正動作する可能性がある。Windowsではこれが「DLL地獄」(英: DLL hell)と呼ばれ、よく知られている問題である。 Windows XPからはSide-by-SideアセンブリDLL署名WinSxS)というメカニズム追加された。これは動的リンク時にライブラリファイル名ではなくライブラリにつけられ署名によってリンクすべきライブラリ決定するのである。これにより、同じファイル名を持つが異な実装を持つライブラリ同時に使い分ける事ができる。よくあるパターンとして、ソースコードから改変ビルドされたランタイムライブラリシステムインストールする場合にこのメカニズム有効に働く。システムインストールされたライブラリライブラリ探索リスト比較上位存在するが、署名一致するプログラムにのみロードされるのでDLL地獄今後解消されるであろう考えられる。しかし、この機構には一つ弱点がある。それはシステムライブラリをオーバーライドして独自機能実装する時、この機構役に立たない方向へ働く。その様実装をする時には故意マニフェスト機能無効にしてライブラリを作らなくてはならない。もっとも、そのようなアプローチは、システムファイル保護機能搭載されWindows 2000リリース時点時代遅れであり、Windows Vista至って管理者と言えどもシステムライブラリを書き換える事は出来なくなっている。 動的ライブラリ起源定かではないが、少なくとも1960年代後半MTS (Michigan Terminal System) まで遡ることができる ("A History of MTS", Information Technology Digest, Vol. 5, No. 5)。

※この「動的リンク」の解説は、「ライブラリ」の解説の一部です。
「動的リンク」を含む「ライブラリ」の記事については、「ライブラリ」の概要を参照ください。

ウィキペディア小見出し辞書の「動的リンク」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「動的リンク」の関連用語

動的リンクのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



動的リンクのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの動的リンク (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのリンケージエディタ (改訂履歴)、ライブラリ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS