質問: ライブラリとapiについて はじめまして。 すごく初歩的な質問ですが 誰かライブラリとapiの違いを教えてください。 どちらもプログラムでよく使うものをまとめたものみたいですが両者の違いが分かりません。 またdllはライブラリの一部なんでしょうか?
回答: application programming interfaceの意味するところは、 アプリケーションをプログラミングするためのインターフェイス(イメージは窓口の利用方法)です。 「1番がインフォメーションカウンタ、2番は普通預金、3番は普通郵便、...」 みたいなものの、プログラム版と思ってもらえば分かりやすいかと。 「1を使うとファイルオープン、2を使うとクローズ、...」 窓口に出す伝票相当が、関数でいえば引数(パラメータ)とかで、 受け取るものが戻り値などです。 api自体はこういったお願いをするための手順や、 その結果の報告方法(郵送?口頭?)なども含めた一連をルールを含めての「決め事」をさすので、 関数呼出が一般的ですがそれに限った話ではないです。 で、ライブラリというのは関数の詰め物です。 他人が作ったライブラリ等は、呼び出しに決め事があるのが普通で、 これがそのライブラリを使うためのapiになります。 > ライブラリは複数のapi より粒度の狭い、各関数単位でapiを見れば、ライブラリは複数のapiを含むともいえますが、 一連の機能群を持ったライブラリであれば、全体としてapiの実装を提供していると取るべきかと思います。 # apiが窓口なら、ライブラリ(郵便局?)の中には関数(受付やその他の局員)が詰まってます。 # 利用者が一般的な利用手順に沿って郵便局を利用するように、 # プログラマはapiに沿ってそのライブラリを使います。 > dllは動的にメモリ確保できるライブラリ 「メモリ確保」だと語弊があるかもしれません。 実行時にリンクできるのがdllで、ビルド時にリンクしてしまうのがsllです。 「(コードに限らない)動的なメモリ確保」だけであればどちらでも可能です。 > ライブラリをリンクするためにはdllとsllどちらでもいいんですか? dllもsllもどちらもライブラリの一種であり、どちらもリンクして使います。 但し、リンクのタイミングがビルドの時に予めやってしまうか、実行時にやるか、の違いがあります。 (実行時にやると、その場で取り替えるとかができる反面、管理が多少煩雑になります)