85

を使用してプログラムをデバッグすると、通常、 ( ?)gdbで定義された奇妙な名前の関数が表示されます。私の質問は次のとおりです。libcglibc

  1. 、、libc/glibcのようないくつかの標準 C/C++ 関数の標準実装はありますか?strcpystrlenmalloc
  2. openそれとも、上記のような最初の使用法だけでなく、 、close、などの Unix/Linux システム コールのラッパーでもありますfctlか? もしそうなら、システムコールを直接発行できないのはなぜlibcですか?
  3. libc1 つの lib (.aまたは) ファイルのみで構成されていますか.so、それとも多数の lib ファイルで構成されていますか (この場合、libcはこの一連のライブラリの一般名です)。これらの lib ファイルはどこにありますか?
  4. libcとはどう違いglibcますか?
4

4 に答える 4

98

libcのような標準 C 関数と のようなstrcpy()POSIX 関数 (システム コールの場合もあります) の両方を実装しgetpid()ます。すべての標準 C 関数が含まれているわけではないことに注意してください。libcほとんどの数学関数が含まれていlibmます。

カーネルへの呼び出しは通常の関数呼び出しではないため、通常の関数を呼び出すのと同じ方法でシステム呼び出しを直接行うことはできず、リンカーによって解決されません。代わりに、アーキテクチャ固有のアセンブリ言語サンクを使用してカーネルを呼び出します。もちろん、これらを独自のプログラムに直接記述することもできますが、libc提供されるため、その必要はありません。

Linux では、カーネルとlibcPOSIX API を提供する組み合わせであることに注意してください。 libcかなりの価値が追加されます-すべてのPOSIX関数が必ずしもシステムコールであるとは限りません.また、そうである関数については、カーネルの動作が常にPOSIXに準拠しているわけではありません.

libcは単一のライブラリ ファイル (.so.aバージョンの両方が利用可能) であり、ほとんどの場合、/usr/lib. ただし、glibc (GNU libc) プロジェクトは単なるlibcものではなく、libm前述のライブラリや、libpthread. これlibcは glibc が提供するライブラリの 1 つにすぎませlibcん。また、glibc 以外にも代替実装があります。

于 2012-07-07T07:28:22.707 に答える
27

最初の 2 つに関して、glibc は C 標準ライブラリ (「標準 C 関数」など) であると同時に、システム コールのラッパーでもあります。コンパイラは方法を知らないため、システムコールを直接発行することはできません.glibcには、システムコールを発行するために必要な「接着剤」が含まれており、アセンブリで記述されています。(これを自分で再実装することは可能ですが、その価値よりもはるかに面倒です。)

(C++ 標準ライブラリは別のものです。それは と呼ばれlibstdc++ます。)

glibc は単一の.so(動的ライブラリ) ファイルではありません。たくさんありますが、libc と libm は最も一般的に使用される 2 つです。静的ライブラリと動的ライブラリはすべて に格納されてい/libます。

libc は、すべての C 標準ライブラリを指すために使用される一般的な用語です。いくつかあります。glibc は最も一般的に使用されるものです。他には、eglibc、uclibc、dietlibc などがあります。

于 2012-07-07T07:27:20.243 に答える
4

それが「標準ライブラリ」です。Windows の世界の "MSVCRTL" とまったく同じです。

Gnu 標準ライブラリ (「glibc」) は、Linux システムで最も一般的に (ほぼ普遍的に?) 見られる libc の実装です。古い SusE Linux システムの関連ファイルは次のとおりです。

ls -l /lib =>
-rwxr-xr-x  1 root root 1383527 2005-06-14 08:36 libc.so.6

ls -l /usr/lib =>
-rw-r--r--  1 root root 2580354 2005-06-14 08:20 libc.a
-rw-r--r--  1 root root     204 2005-06-14 08:20 libc.so

このリンクは、追加の質問に回答する必要があります (完全な GLibc ソース コードへの参照を含む)。

于 2012-07-07T06:42:16.973 に答える