web-dev-qa-db-ja.com

バイナリファイルとライブラリの違いは何ですか?

私はファイルシステム階層標準を理解しようとしています。私はバイナリとライブラリの両方を調べましたが、私は現在それを理解しています:

binariesは、CPUとプロセッサをビットで直接制御する、バイナリ形式のコンピュータ可読コードのファイルです。

librariesは、PHPのJavascriptでモジュールが必要な場合など、便宜上、さまざまなプログラムで使用できる関数です。

この理解は正しいですか?もしそうなら、なぜ私たちはまだライブラリとバイナリを分離しているのですか?一部のライブラリはバイナリバイナリですよね?そして、いくつかのバイナリー(cat、less、date、rm、cpなど)は、ライブラリーであるかのように使用および再利用されます...誰かが違いを説明し、これら2つの単語のより良い定義を見つけるのを手伝ってくれませんか?ありがとうございました。

11
houallet

あなたの理解はほとんど正しいですが、考慮すべき追加事項がいくつかあります。

  1. 「バイナリ」とは、人間が読めないものを指します。これは通常、マシンコードを指しますが、他の多くのファイルもこの意味でバイナリファイルであり、ほとんどのマルチメディアフォーマットが良い例です。ただし、FHSにはこの用語についてより具体的な用法があります。
  2. ライブラリはバイナリコードにすることができます。実際、_/lib_のほとんどは、マシンコードにコンパイルされたライブラリです。
  3. catのようなものは、ライブラリ内のコードの呼び出しなどのシェルスクリプトで使用されますが、それらは単独で実行できるため、FHSの意味でのライブラリではありません。

これらの点の結果として、標準ドキュメントを作成していない人の間で一般的な用語は次のとおりです。

  • オブジェクトファイル:これらはネイティブにコンパイルされたマシンコードですが、実行されなかったり、呼び出し可能ではない場合もあります。他のカテゴリに分類されない限り、通常は_.o_拡張子があり、ソフトウェアのビルド時を除いて、ほとんどのシステムでほとんど見られません。以下にいくつかのことを理解するために重要なので、ここにリストしました。

  • 実行可能ファイル:これらは、直接実行できるほとんどが自己完結型のコードで構成されるファイルです。それらは、カーネルによって直接ロードできる特別にフォーマットされたオブジェクトファイル(catbashpythonなどはすべてこのタイプの実行可能ファイルです)か、それ自体が実行可能プログラムである中間プログラムによって解釈されます(Minecraft、pydoc、およびcowsayはすべて、このタイプの実行可能プログラムの例です)。最初のタイプの実行可能ファイルは、UNIXシステムではほとんどファイル拡張子がありませんが、2番目のタイプの実行可能ファイルは、そうでない場合があります。これは、FHSが「バイナリ」と呼んでいるものです。他の実行可能ファイルから実行できますが、特別な関数を呼び出して呼び出す必要があります(CおよびC++ではfork()およびexec()、Pythonのsubprocessモジュール以外のもの)など)、別のプロセスとして実行します。

  • ライブラリ:これらは、別のライブラリまたは実行可能ファイルから呼び出すことができる再利用可能なコードを含むファイルです。ライブラリのコードは、ライブラリが読み込まれると(ほとんど)他のコードによって直接呼び出され(コンパイルされたコードについて話すときは「リンク」と呼ばれます)、それを呼び出すコードと同じプロセスで実行されます。ライブラリには3つの一般的なタイプがあります。

    1. 静的ライブラリ:これらは元々の種類です。それらは、ライブラリ内の関数ごとに1つずつ、多数のオブジェクトファイルが含まれたアーカイブファイル(通常はAR形式)で構成されています。オブジェクトファイルは、それらを使用する実行可能ファイルにリンクされるため、静的ライブラリのみを使用する実行可能ファイルは、他のコードから基本的に100%独立しています。 UNIXシステムでは、通常、_.a_拡張子が付いています。静的ライブラリの概念は、コンパイルされたプログラミング言語以外には存在しません。
    2. 動的ライブラリー:これらは、今日使用されている最も一般的なタイプのライブラリーです。ダイナミックライブラリは特別なオブジェクトファイルで、通常、UNIXでは_.so_拡張子が付いています(_.dll_はWindowsでは標準です)。これは、実行時にそれを使用する実行可能ファイルによってロードされます。実動システムの_/lib_にあるもののほとんどは、動的ライブラリーです。
    3. モジュール:これは、インタプリタ言語の動的ライブラリに相当します。処理はコンパイル済み言語とは少し異なり、コンパイル済み言語とは異なり、ファイルがモジュールと実行可能ファイルの両方になる可能性があります(Pythonの_http.server_を参照) =例の標準ライブラリ)。
9