これら2つの用語が同じ意味で使用されているのを時々目にします。
これら2つの用語の実際の違いは何ですか?それらはどのように異なって使用されますか?これら2つのライブラリに代わるものは他にありますか?
コメント
- ここで質問する前にオンライン検索を実行したと思います。これまでに何を見つけましたか?その情報はどのようにあなたの質問に答えないのですか?質問を編集して努力を示してください。そうすれば答えは'すでに知っていることを繰り返す必要がありません。 。参照:良い質問をするにはどうすればよいですか?
回答
C標準ライブラリはCプログラミング言語の一部であるため、仕様(記述いくつかのテクニカルレポートでは英語で)。たとえば、 n1570 ドキュメントでは、malloc
とは何かとその動作について説明しています。
別の関連仕様、 C POSIXライブラリ(多かれ少なかれC標準ライブラリのスーパーセット)もあります。たとえば、dlopen
とfork
の両方がPOSIXによって指定されています(ただし、C11標準では無視されます)。
GNU glibc ライブラリは、C標準ライブラリ(のスーパーセット)とCPOSIXライブラリの実装です。これは、いくつかのフリーソフトウェアです(ほとんどの場合、GCC方言用にCで記述されており、少しアセンブラーが付いています)。 システムコール( syscalls(2)にリストされている)を使用して、カーネル。 musl-libc (または Dietlibc a)など、C標準ライブラリの他の実装を使用できます。 >)。
libc
を回避し、アセンブラコードを記述することで、カーネルを直接システムコールすることができます。これはめったに行われません(例として、 Bones Schemeコンパイラ、または BusyBox があります)。ほとんどのプログラムは、libc
を介してシステムコールを実行し、そのlibc
によって提供される関数を利用します。したがって、libc
はLinuxシステムの要です…
ちなみに、GNU glibcには、標準以外の便利な機能があります。 バックトレース関数、またはプログラム引数を解析するためのいくつかの追加の方法として。
標準で要求されていることと実際に行われていることには微妙な違いがあることに注意してください(たとえば、メモリのオーバーコミットメントはmalloc
が非標準的な方法であるか、Linux dlopen
には、 POSIX が必要とするよりも多くのフラグがあります)。
Th man
ページでは、一般に、標準準拠がどのように機能するかを説明しています。たとえば、 dlopen(3)を参照してください。
libc(7)も参照してください。 および vdso(7)。
回答
Cのすべての実装は標準ライブラリを提供する必要がありますが、すべてのCコンパイラがFSFによって作成されているわけではありません。したがって、GNUCコンパイラはGNUCライブラリを使用し、IntelのCコンパイラは別の標準ライブラリ(あまりわかりにくい名前)を使用します。どちらも、C標準が必要とする標準ライブラリのインスタンス化になります。
回答
「GNU」の「UNIX」を読んだ場合、用語は同じものであるため、長い間交換可能でした。
BSDが軌道に乗るまで、AT & TのUNIXライブラリは THE Cライブラリでした。コンパイラがだったからです。 Cコンパイラ(ほとんどの場合)。
BSDの後、System V UNIX、BSD UNIX、GNU(GNUはUnixではありません)があり、すぐにCコンパイラがありました。どこにでも、それぞれが標準ライブラリの独自の実装を持っています。