• ベストアンサー

ダイナミックリンクライブラリについて。

ダイナミックリンクライブラリで、共通な処理(サブルーチン)を集めたプログラムです。という回答を頂いたのですが。どういう事でしょうか?ご教授頂けると幸いです。すみませんが。 結局、そのダイナミックリンクライブラリには、全てのソフトで、共通する処理をその中にまとめて、その中から、ファイルを開くということを呼び出すということでしょうか?ご教授頂けると幸いです。すみませんが。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> ダイナミックって、実行ファイルを動かすことなのですね?実行ファイルがそのライブラリということでしょうか? 違います。 実行ファイルとは別に ダイナミックリンクライブラリというファイルがあって 実行時に メモリー上でこれらがリンク(連結)されて実行されます。 実行するたびにリンクするからダイナミックリンク(動的リンク)と呼びますが 反対に、実行ファイル作成した時点でライブラリもリンクしてあるのなら、 スタティックリンク(静的リンク)です。 スタティックリンクの場合、実行ファイルのサイズもそれだけ大きくなります。 > プログラムの一部とは、例えば、どんなプログラムとかでしょうか? プログラムというのは、階層構造です。 表面上に見えている機能は、プログラムそれぞれで違いますが どんなプログラムでも、ファイルの読み書きや画面の制御といったことは 行っています。 こういった階層構造の底辺の部分は、わざわざ自分で作らなくても 先人が作ってくれたもの(ライブラリ)を使い回せばよいのです。

zasx1098
質問者

補足

静的リンクの場合、なぜ、実行ファイルのサイズが、それだけ大きくなるのでしょうか?それと、動的リンクと実行ファイルが同時に実行されるということでしょうか?ご教授頂けると幸いです。すみませんが。

その他の回答 (4)

  • korena
  • ベストアンサー率10% (3/28)
回答No.5

質問者様にとってプログラミングとはなんですか ご教授頂けると幸いです。すみませんが。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

プログラミングの経験はどのくらいあるんですか? 仮にゼロかもしくは限りなくゼロに近い状態だとすると、 回答を読んでもちんぷんかんぷんではないですか?

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.2

>ダイナミックって、実行ファイルを動かすことなのですね? 違います。 その「ダイナミック」は「動的」の意味です。 理解する上で必要になる知識が不足されているようですから、 詳細な説明はしませんけど。

zasx1098
質問者

補足

つまり、ダイナミックリンクライブラリとは、実行ファイルにない機能を後から付け加えるということでしょうか?ご教授頂けると幸いです。すみませんが。

回答No.1

ダイナミックリンクライブラリとは 実行ファイル内に含まれない機能(プログラムの一部)を  実行時に動的(ダイナミック)にメモリー上に読み込むことで 実行ファイルから目的の機能が使えるようになるというものです。 なので、ダイナミックリンクライブラリが、 OSメーカーや機器メーカーやプロジェクト管理者から提供されていると プログラマはその機能をプログラミングしなくて済むようになり 開発効率が格段に上がります。 また、該当機能が実行ファイルに含まれていないので ダイナミックリンクライブラリ中のある機能にバグがあることが、 あとから発覚したときも 実行ファイルをいちいち差し替えなくても、 ダイナミックリンクライブラリを差し替えるだけで それを使っている全ての実行ファイルは、該当するバグが修正されることになります。 ただし、独自のダイナミックリンクライブラリを使っている実行ファイルは それのインストールも必要なので、開発や運用で気を付ける必要はあります。 (ちゃんとしたインストーラーを用意すればよいだけですが)

zasx1098
質問者

補足

プログラムの一部とは、例えば、どんなプログラムとかでしょうか?ご教授頂けると幸いです。すみませんが。ダイナミックって、実行ファイルを動かすことなのですね?実行ファイルがそのライブラリということでしょうか?これについてもご教授頂けると幸いです。すみませんが。

関連するQ&A

  • ダイナミックリンクライブラリについて。

    ダイナミックリンクライブラリで、共通な処理(サブルーチン)を集めたプログラムです。という回答を頂いたのですが。どういう事でしょうか?ご教授頂けると幸いです。すみませんが。

  • ダイナミックリンクライブラリについて。

    実行ファイルとは別に ダイナミックリンクライブラリというファイルがあって 実行時に メモリー上でこれらがリンク(連結)されて実行されます。 実行するたびにリンクするからダイナミックリンク(動的リンク)と呼びますが 反対に、実行ファイル作成した時点でライブラリもリンクしてあるのなら、 スタティックリンク(静的リンク)です。 スタティックリンクの場合、実行ファイルのサイズもそれだけ大きくなります。 と、プログラムというのは、階層構造です。 表面上に見えている機能は、プログラムそれぞれで違いますが どんなプログラムでも、ファイルの読み書きや画面の制御といったことは 行っています。 こういった階層構造の底辺の部分は、わざわざ自分で作らなくても 先人が作ってくれたもの(ライブラリ)を使い回せばよいのです。 で、疑問点が、2つあって①ダイナミックリンクライブラリとは、実行ファイルとダイナミックリンクライブラリというファイルが同時に実行される(まとめて)ということでしょうか? ②スタティックリンクで、実行ファイルのサイズもそれだけ大きくなる。とはどういうことでしょうか? ご教授頂けると幸いです。

  • ライブラリ内の処理中におけるライブラリリンクについて

    VC2005を使用しています。 ライブラリからライブラリファイルって使用できるんでしょうか? (例) A.lib内の処理に、B.DLLを明示的に読み込み処理 ----------------- <A.lib内の処理> hDLL = LoadLibrary("B.dll"); // DLLのロード if (hDLL != NULL) { ~ 処理実行 ~ } ----------------- 私の環境で何度やっても、GetLastErrorにて、 "7E"(ERROR_MOD_NOT_FOUND)が出力されます。 ロードしているパスに、B.dllは必ずあります。 上記の例は明示的リンクですが、暗黙的リンクでもかまいません。 ライブラリ処理の中でライブラリファイルを使用するには、 どうすれば良いでしょうか。 もしかして、ライブラリ内で他のライブラリを使用できない 等のオチもあるのでしょうか...。

  • スタティックライブラリのリンクについて

    「猫でもわかるWindowsプログラミングを買ったのですが、 VC++2008エクスプレスエディションで出来ると書いてあり 説明どうりやったのですが、スタティックライブラリのリンクをするように書いてあったのですが、リンクはわかったのですが、libファイル を出したいのに、出ません。本には、すべてのファイルが出ており、libファイルとリンクができているのですが、私がやってみたところ、 すべてのファイルができず、libファイルが表示されません。 すべてのファイルを出すにはどうしたらいいでしょうか?

  • ライブラリのリンクについて

    Visual Studio net 2003 で プログラミングを始めたばかりの初心者です。 先日 猫でもわかるwindows プログラミング(第2版)の本をつかって p415にある説明どうりに 第13章のコモンコントロールのプロジェクトにライブラリをリンクさせようとしたのですが、その第13章で必要と思われるcomctl32.libが見つかりません。このライブラリがないせいか、この章でつくったプログラムには fatal error がでてきてしまいます。 いったいcomctl32.libはどこにあるのでしょうか? 一応ライブラリのリンクの仕方もよろしければご教授ください。説明に不足があれば追加致しますのでよろしくお願いします。

  • ライブラリのリンクについて。

    ふと、疑問に思ったので質問させてもらいます。 C言語などでプログラムを作る時、ライブラリをリンクさせて使うと思いますが、その場合プログラムを実行させた場合メモリー上ではどうなるのか教えた貰いたいです。 例えばprintf関数を使う場合その命令そのものがプログラムに組み込まれてメモリーに読み込まれているのかということです。 前にどこかで読んだ記憶があるのですが、いろいろなところから呼び出される標準的なものはシステムで一箇所にありそれを使うなどということがあったような無かったような記憶があやふやですが見た覚えがあるので気になってしまいました。 あとライブラリなどから一つだけ関数を使う場合、使わない他の関数などもメモリーに読み込まれていたりするのでしょうか? よく使う自分で作った関数を一つのファイルにまとめ、それを定義したヘッダーファイルをincludeした場合も同様で使わないほかの関数はどうなるのでしょうか?

  • シンボルに@n接尾辞がついているライブラリへのリンク(Fortran)

    インテル fortran Windows版 ver.11を使用しています。 あるライブラリを使用したf90のプログラムをビルドしようとしています。 コンパイルは通っているのですが、 リンクする際にシンボルが見つからずにリンクエラーとなってしまいます。 call func(varA, varB) のソース二対して、 LNK2019: 未解決の外部シンボル_FUNCが参照されました。 というような具合です。 ライブラリの中身を見てみると(nmコマンド) _FUNC@8 のようなシンボルが定義されているのですが、 一方でインテルコンパイラは _FUNC というシンボルを検索しているので未解決となってしまっているようです。 インテルのコンパイラオプション等でこのような@nの接尾辞がついたシンボルを 正しく検索、リンクできるようにする方法はないでしょうか? (サブルーチン名に@8を含めてしまうというのも一つの手段ですが、 @が予約語であるため、サブルーチン名に使用することができません。) ご存じの方がいらっしゃいましたら、ご教授いただけば幸いです。 よろしくお願いいたします。

  • スタティックリンクライブラリで2重リンクできる?

    スタティックリンクライブラリで2重リンクをしようとすると、warning LNK4006が発生してしまいます。 メッセージ: "~で定義されています; 2 つ目以降の定義は無視されます" 例えば、 aaa.libがbbb.libとccc.libをリンクしてて、bbb.libとccc.libはそれぞれddd.libをリンクしているとします。*.libはすべてスタティックリンクライブラリで提供を考えています。   [ aaa.lib ]    |   | [bbb.lib] [ccc.lib]   |     | [ddd.lib] [ddd.lib] 調べてみると「ライブラリーを結合する時に,このエラー・メッセージが表示された場合,ライブラリーに既に存在しているシンボルを追加しようとしています。」ということで、要は"ddd.lib"が重複してリンクされているという事のようなのですが、原因ばかりで解決策が分かりません。 LNK4006の解決法が分かれば良いのですが、最終的にはこの構成で"aaa.lib"だけで提供するようなライブラリを作成したいです。実現するためにはどのようにしたら良いのでしょうか?アイデアを頂けたら助かります。また詳しい方がいらっしゃいましたらご教授お願いいたします! ※Windows2000でVisualStadio.NET2003を使用してます。

  • 【C++】静的リンクと動的リンクの違い

    静的リンクと動的リンクの違いについて教えてください。 ググって、wikiにて確認したところ、 動的リンクは、実行時にプログラムの結合を行う。 静的リンクは、コンパイル直後の実行ファイル生成時に、ライブラリ等を全てリンクし、必要なコードが全て揃った実行ファイルを生成する。 というのはわかりました。 それを踏まえて、  (1)-(1)libファイルで静的リンクさせるケース   メソッドやプロパティのインデックスというかインタフェース仕様のみ書かれている。   そして、そのインデックスを元にコンパイルチェックを行っている。  (1)-(2)objファイルで静的リンクさせるケース   objには、.cppと、.h に書かれている処理のうち、そのソース本体(そのクラス自身のモノとして持っている処理)のプロパティやメソッドのことが機械語で書かれている。   プロパティやメソッドが書かれているため、当然インタフェース仕様もわかる。 であろうと捉えていますが、この認識で大雑把には合っていますでしょうか? また、DLLを使う場合、動的リンクとは呼ばれているものの、 「DLLでは、objに加え、必要なリンクの情報まで持っている」と思われるので、 結局、リンカによるリンク実行時に、インタフェースで不整合が起きていないかはチェックされているという認識なのですが、合っていますでしょうか?  (だとすると、なぜ、ある意味、DLLを使っていても静的リンクなのかなと感じ、動的リンクと呼ぶことに不自然さを感じます) 宜しくお願いいたします。 .

  • サブルーチンについて。

    ExcelやWord、ブラウザやメールソフト、Acrobat Reader等々でファイルを保存する時に表示されるダイアログはコモンダイアログライブラリという名前のダイナミックリンクライブラリを使って実現されています。 みんな同じダイアログなのは同じライブラリを利用しているからです。 ファイルを保存する機能を各アプリケーションの作成者がイチイチ作っていたら時間の無駄だから、OSに付属しているライブラリをアプリケーションから呼び出す(サブルーチンを呼ぶ)ことで作成の手間を省くことができています。 みんな求めている機能(結果)が同じだから共通で使えるライブラリとして用意しておいて使い回してるのです。という説明で、OSに付属しているライブラリをアプリケーションから呼び出すとは、どういうことでしょうか?ご教授頂けると幸いです。すみませんが。

専門家に質問してみよう