• ベストアンサー

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

プログラミング初心者です。 とても初歩的な質問になりますがよろしくお願いいたします。 早速ですがプログラミングにおいての「ライブラリ」とは何でしょうか? 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% (1241/2889)
回答No.2

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

input_output
質問者

補足

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

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

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

input_output
質問者

補足

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

関連するQ&A

  • Java初心者です。クラスライブラリについて

    Java初心者です。 オブジェクト指向やクラス・インスタンスの意味が少しずつ分かってきたような状態です。 実際にコーディングしてみて理解していこうと思うのですが、 例えば、「~~~みたいなことをしたい」と思ってプログラミングする際に、javaclassライブラリを検索して使い方を調べていくといった地道な作業をしていくのでしょうか。 また、そのクラスライブラリを使う際は、import ライブラリの入っているクラス名みたいなことを必ずつけるといった解釈で合ってますでしょうか。 初心者なので質問が的外れでしたらすみません。。。

    • ベストアンサー
    • Java
  • ライブラリの具体例を教えて下さい

    プログラミング全くの初心者ですライブラリについて何点か教えて下さい 1,メールを送信するライブラリとかがあるんですか? 2,ライブラリは今までの誰かが作ったものを加筆?修正しながらどんどん増やしていったりするものなんですか? 3、ライブラリとライブラリを結合したりできますか? 4、ライブラリはフォルダに入っているファイルですか?

  • プログラミング言語のAPI

    プログラミング言語の『API』にあたるものって具体的には何なのでしょうか? 例えば,C言語の場合『API』にあたるのはprintfやscanfなどの『標準関数全体』という解釈で合っているのでしょうか? また,ライブラリとAPIの関係についても教えていただけると嬉しいです. 読んだ本の中で少し触れられていたのですが,表現が曖昧であまりよく分かりませんでした・・・.

  • コンソールプログラムで使用するライブラリについて

    今まで疑問に感じつつないがしろにしていた部分なんですが、 例えばWin32APIを使用してプログラミングする時にコンパイラはリンクの際にwindowsのシステムフォルダ内にあるdllファイルを参照してリンクするんですよね(あってます?)?ではコンソールプログラム(dos上のプログラム)をリンクする際にはどうなるのでしょうか(例えばCの標準関数のライブラリはどこにあるのでしょうか?)? 私の予想では標準関数に関してはコンパイラが予め用意している静的ライブラリを使ってリンクしているんじゃないかと思うのですが実際どうなんでしょうか? 大した質問でもないのに長々とした文章になってしまいましたがよろしくお願いします。

  • Cランタイムライブラリ

    まだWINDOWSプログラミングを始めて間もない初心者です。 宜しくお願い致します。 マルチスレッドの動作確認をする際に簡単なソースを作る過程で、1つ疑問が浮かびました。 CreateThreadについてMSDNのサイトを見ると、 ”C のランタイムライブラリに記録されている関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。この方法に従わないと、ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。” とあるのですが、この関数はCのランタイムライブラリに属する、この関数はCのランタイムライブラリに属さない、というのは、例えばどこかのサイトを見れば分かるものなのでしょうか? あと、”わずか”、というのがどの程度を指しているのか良く分かりませんが、”わずかなメモリリークが発生”すると、具体的には何が起こるのでしょうか? どなたか分かる方ご教授下さい。

  • C言語 キーワードとは??

    プログラミング初心者です。 初歩的な質問ですがよろしくお願いいたします。 現在C言語入門書を読んでいるのですが、「キーワード」と言うのが理解出来ません。 また当該入門書ではキーワードについて 「キーワードとは C 言語が仕様レベルで予約済みの名前のことで、前回のプログラムで紹介した return などはキーワードに属します。」と記載されていいますが理解出来ません。 初心者ですので、例え話なども用い解説してくれれば幸いです。 よろしくお願いいたします。

  • C言語のライブラリ関数の勉強の仕方

    はじめまして、私はC言語を勉強中の初心者です。 基本的な構文などを理解して、標準ライブラリ関数を勉強して行こうと思ったのですが、うまく勉強できずに苦戦しています。そこで2つ聞きたいことがあります。 1.普通標準ライブラリ関数はどの程度覚えるものなのでしょうか? 徹底的に網羅するのか、一般的なところは押さえて後は適当にやるのか、などを知りたいです。 2.関数はどうやって勉強したらいいのでしょうか? 私は細かいところまで徹底的に覚えたいタイプで、今は、自分のコンパイラ(VC++ 2008)のincludeフォルダにあるヘッダファイルを調べ、関数のプロトタイプ宣言をしてあるところを見つけて関数名を洗い出し、その関数名で検索を掛けて関数を覚えていく、という方法を取っているのですが、これだと恐ろしく効率が悪いです。皆さんはどうやってライブラリ関数について勉強していったのでしょうか? 質問したいのは上記の2点です。回答よろしくお願いします。

  • ライブラリ作成時のグローバル変数の対応(C言語)

    C言語を用いてライブラリを作成しています。 ライブラリは機能ごとにファイルを分けています。 今、ライブラリの中でのみ使用するグローバル変数やグローバル関数が必要になりました。 このグローバル変数や関数は複数ファイルで参照するため、static宣言はできません。 しかし、このグローバル変数や関数は公開する必要はありません(ライブラリの中でのみ使用します)。 このようなことをC言語で実現するためにはどうしたらよいのでしょうか? 開発環境は Windows7 VisualC++2010 です。 VisualC++2010を使うなら C++で書けばいいのではないかといわれそうですが、 C言語でプログラミングしたいのです。 以下のようなサイトがあったのですが、これを使うしかないでしょうか? http://0xcc.net/blog/archives/000108.html

  • C/C++のヘッダーファイルやライブラリー関数について

    C言語の勉強をはじめました。コードの最初に書く#include<stdio.h>などの ヘッダーファイルやライブラリ関数を見ることはできるのでしょうか? 初歩的なことですみませんがよろしくお願い致します。

  • C++ライブラリの使い方について

    C++初心者です。ゲームプログラミングを学びたいと思い、 「ゲームプログラマになる前に覚えておきたい技術」という本で勉強を始めました。 この本には専用のライブラリが付属しており、それを使用することを前提としているのですが、 ライブラリの使い方がよく分かりません。 こちらの環境は、 OS : Mac OS X コンパイラ : GNU GCC です。 本に付属しているのは、拡張子が.libと.pdbのファイル群です。 調べてみたところ、.libのファイルはWindows環境で使用するもので、 UNIX系のOSでは拡張子は.aになるそうですが、 .libのファイルをMac OS Xで使えるでしょうか? もしできるなら、どのようにリンクしたらいいのかも教えて頂きたいです。