• ベストアンサー

プログラミング 「ライブラリ」??

プログラミング初心者です。 とても初歩的な質問になりますがよろしくお願いいたします。 早速ですがプログラミングにおいての「ライブラリ」とは何でしょうか? Wikipediaなどその他色々調べてはみたのですが、いまいち理解出来ません。 勝手な解釈ですが私の中では「あらゆる関数」を一つのファイルとしてまとめた物。と言うふうに解釈しています。 私の解釈で間違っている部分も含め、たとえ話なども用いて教えてくだされば幸いです。 よろしくお願いいたします。

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

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.4

「ライブラリ」はいろいろな意味に使われる単語ですが、 ご質問でいうライブラリとは * プログラムのビルド時に静的リンクさせるファイル ** ファイル名は UNIX: lib*.a / Windows: *.lib ** 静的ライブラリ とか アーカイブ とか呼ばれる * プログラムの実行時に動的リンクさせるファイル ** ファイル名は UNIX: lib*.so / Windows: *.dll ** 動的ライブラリ とか 共有ライブラリ とか呼ばれる のどちらかだと思います。 これらのファイルは簡単に言えば コンパイル済みのC言語プログラムを纏めたものです。 ライブラリの作り方の例 http://docs.oracle.com/cd/E22054_01/html/821-2495/bkamp.html http://docs.oracle.com/cd/E22054_01/html/821-2495/bkamq.html つまり実態はただのC言語プログラムなので、 C言語ソースファイルに書くことが出来る関数やグローバル変数/定数を、 有る程度の規模でまとめた物。 と理解してください。 ちなみにC言語は、関数や変数を宣言無く使うとコンパイルできない仕様のため、 ライブラリファイルに含まれている全ての関数や変数を、 extern宣言したヘッダファイル(*.h)が付属するのが普通です。 ライブラリが使用する構造体やマクロ定数の宣言も、このヘッダファイルでしょう。 例) windows.h <- Windows API という動的ライブラリを extern 宣言 DxLib.h <- http://homepage2.nifty.com/natupaji/DxLib/ で、なぜライブラリファイルという存在があるのかというと、 * よく使う機能はコンパイル不要でビルドしたい → ビルド速度Up! * ソースファイル無しにプログラムを配布したい → プロプライエタリに最適! あたりが理由かと思います。 C言語の printf などが、静的ライブラリ libc.a にて提供されるのは前者 Windows の msgbox などが、動的ライブラリ User32.dll で提供されるのは後者 の意味と推測します。

input_output
質問者

お礼

回答ありがとうございます。 細かく詳細まで書いて頂きとても助かりました。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

おおざっぱにいえば「いろんなプログラムで共通して使われる (だろう) ものをまとめたもの」がライブラリ. 逆にいえ「共通して使われる」とは思えない (思いにくい) ものは, わざわざライブラリにしなくてもいい. ついでにいうと 「ライブラリは ソースプログラムの冒頭で #include と言うディレクティブを記述して読み込む」 というのは (少なくとも C では) 全くの大嘘. 厳密には「ライブラリを #include ディレクティブで読み込む」ことはできるものの, まず間違いなくエラーになるので意味はない.

input_output
質問者

お礼

回答ありがとうございます。 細かく詳細まで書いて頂きとても助かりました。

  • Kaneyan-R
  • ベストアンサー率42% (1340/3126)
回答No.2

通常「ライブラリ」というと、複数のプログラムに共通するプログラム(関数)を、まとめて一つにしたものになりますね。 なので、一つのプログラムでしか絶対に使わないものをライブラリに入れても、あまり意味はない。 例えば、ファイル操作やレジストリ操作と言ったプログラムは、大抵どのプログラムでも使用するので、ライブラリ化して参照した方がよいですが、受け取ったデータを利用して表示するようなものは、個々のプログラムによって処理内容が変わるので、ライブラリ化する必要は無いでしょう。 つまり、「共通で利用するものはライブラリ化する」と考えると良いかと。

input_output
質問者

補足

回答ありがとうございます。 もう少しお伺いしてもよろしいでしょうか? 例えば、データ入力処理を行う関数や出力処理を行う関数が有るとします。(実際に有りますが。) これらの関数を一つのファイルとしてまとめた物をライブラリと示すのでしょうか?(上記で提示した処理内容はあくまで例題です。) また、上記内容でOKとなった場合でも疑問に思う点が有ります。 現在 C言語入門書を読んでいるのですが当該本書の内容によると 「ライブラリは ソースプログラムの冒頭で #include と言うディレクティブを記述して読み込む」と言うようなニュアンスで記載されています。 ですがライブラリとしてでは無く単に関数として用意されている物も有りますよね? のにも関わらずなぜライブラリと言う物が有るのでしょうか? それなら単に関数して提供されてる物もライブラリとして扱えば良いのではないかと疑問に思います。 長文で申し訳有りません。 よろしくお願いいたします。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

あらゆる関数と言ったら、言い過ぎでしょう。 関数群、クラス群であることは間違いありません。 通常は、分野ごとにまとめているものです。 数値計算用ライブラリ 土木建築用ライブラリ xxx会社用ライブラリ といった具合です。

input_output
質問者

補足

回答ありがとうございます。 もう一つだけ質問してもよろしいでしょうか? C言語で関数を利用する場合はライブラリを必ずインクルードしなければならないんですか? 又ライブラリとしてでは無く単に関数として提供されている物も有るんですか? よろしくお願いいたします。

関連するQ&A