ライブラリとヘッダファイルの使い分け


オジイ  2012-05-16 13:53:30  No: 73378  IP: 192.*.*.*

ライブラリとヘッダファイルはどのように使い分けますか。

私が考えるとライブラリで宣言した関数Aとヘッダファイルで宣言した関数Aをプロジェクトが使用する場合、ライブラリという形で使用するのとヘッダファイル(そのヘッダファイルの関数処理を書いたソースファイル含む)という形で使用するのも変わらないのでは?と思っています。
それぞれの違いということも含め、どういった場合にどちらを使用するなど
どのように使い分けるのでしょうか?

編集 削除
ホウジョウウサギ  2012-05-16 18:31:35  No: 73379  IP: 192.*.*.*

どちらにしろヘッダは通常は使うと思いますが…

(1)ソースファイルそのものを新しいプロジェクトにコピーしてきて使う

のと比較して…

(2)lib(スタティックリンク)
  →新しいプロジェクトでこの部分を再度コンパイルしなくていい.
(3)DLL(ダイナミックリンク)
  →さらに,DLL部分のみの実装更新が可能(変更でインタフェースが変わらないならば)

といった感じかな?と思います.
実際,一人でそれほど大きくないプログラム書いてるなら,あまり変わらないかも.
他人にモジュール提供するなら,
ライブラリ提供だと実装ソースコードを開示せずに済む.

編集 削除
PATIO  2012-05-17 15:19:27  No: 73380  IP: 192.*.*.*

ライブラリという言葉をどう言う意味で使っているのかを再考した方がよいと思います。

一般にライブラリと言うのは機能の集合体として提供することを意味します。
LibファイルやDllファイルで提供するのか、ソースファイル一式で提供するのかは提供形式の話でライブラリを提供すると言う意味とは別の話です。

自由度と言う意味ではソースファイル一式で提供した方が優位です。
コードの内容によっては開発環境依存もありえますが、
基本的に利用する側の開発環境でリビルドすれば、その環境で使える状態にすることが出来ます。
これに対してLibファイルやDllファイルと言ったバイナリ形式で提供する場合は利用する側の環境ごとにバイナリファイルを用意する必要があります。
仮にソースファイル一式が公開されていない場合、自分の環境にあったバイナリが提供されていなければ利用できないことになります。

ソースファイル一式で提供する場合、中に記述されている内容は丸見えの状態ですから、
ライブラリが提供する機能に関してのノウハウを秘匿したい場合はソースファイル一式による提供は都合が悪いことになります。
この場合、クラスや関数の宣言のみのヘッダーファイルとLibファイルやDllファイルと言ったバイナリ形式のファイルのセットで提供するのが一般的になります。
場合によっては、ソース一式を別に料金を取って開示するケースやアルゴリズムの流用は駄目という意味のライセンス契約を結んでソース提供するケースはあるかもしれません。

提供形式の違いが直接機能に影響することはほとんどないと思います。
提供形式の違いは、提供側の事情やらノウハウの秘匿と言った部分の話になるでしょう。

個人が自分の環境の中で利用するライブラリを作成して使う場合、
どういう形式で管理するかはその人の都合しだいです。
それに関する話としては、ホウジョウウサギさんが書かれている通りです。

編集 削除
tetrapod  2012-05-17 18:56:27  No: 73381  IP: 192.*.*.*

使い分けっていう区分は不適切。
ヘッダ : 使い方マニュアル (コンパイラにとっての)
ライブラリ : 使われるブツ
ってことで、2つで1セットなだけ。

編集 削除