什么是GLIBC?它有什么用途?

69
我在搜寻C标准库的源代码,我的意思是想看看cos、abs、printf、scanf、fopen等所有标准C函数是如何编写的,也就是它们的源代码。

在这个过程中,我发现了GLIBC,但我不知道它实际上是什么。它是GNU C Library,并包含一些源代码,但它们到底是什么,是标准函数的源代码还是其他东西?它有什么用途呢?


5
GNU C库是GNU对C标准库的实现,该库包含了一些特定于GNU实现的附加内容。如维基百科所述。 - wkl
5个回答

79

这是实现了C标准库及一些常用非标准库的东西。

主要包含以下内容:

1) 根据ANSI、c99、c11标准描述的C库,包括宏、符号、函数实现等。(如printf()、malloc()等)

2) POSIX标准库。系统调用的"用户空间"接口。(如open()、read()等。实际上glibc并没有"实现"系统调用,内核才是做这个事情的。但是glibc提供了用户空间接口,这样用户应用程序就可以像使用普通函数一样使用系统调用)

3) 一些非标准但实用的东西。

"使用力量,阅读源代码"

$git clone git://sourceware.org/git/glibc.git

(最近我查看了glibc中的malloc.c,让我有些大开眼界)


1
还有其他东西提供“glibc提供用户空间接口以访问内核提供的服务”吗?C是唯一提供这种API的语言吗? - Marat Mkhitaryan

16

标准有几种实现方式,其中大多数Linux使用的是Glibc,但也有其他实现方式。Glibc还包含(如Aftnix所述)设置场景以进行跳转到内核(也称为系统调用)的粘合函数。因此,Glibc的许多“函数”并不执行实际工作,而只是委托给内核。

要阅读Glibc源代码,只需搜索即可。有无数的网站提供这些资源,还有几种变体。

Windows使用微软自己的实现方式,我相信称为MSVCR.DLL。我怀疑你在任何地方都找不到该库的源代码。还要注意的是,一些Linux黑客可能认为是“标准”的函数在Windows上不存在(特别是fork)。反之亦然。

其他系统将拥有自己的libc。


5
微软公司将 C 运行时的源代码与 Visual Studio 一起提供(即使是免费的 Express 版本,我认为也是如此)。但出于某些原因,它并没有包括浮点运算例程的源代码(或者至少其中的一部分)。也许它们是从不允许源代码分发的第三方许可证获得的?如果微软认为它们比运行时的其他部分更重要,那我会感到惊讶。 - Michael Burr

11

glibc软件包包含系统中多个程序使用的标准库。为了节省磁盘空间和内存,以及使升级更容易,通用系统代码被保存在一个地方,并在程序之间共享。该软件包包含最重要的共享库集:标准C库和标准数学库。没有这两个库,Linux系统将无法正常工作。glibc软件包还包含国家语言(区域设置)支持。


4
这里有一些“亲身经历”的观点:

3

是的,这是标准库函数的实现。

更具体地说,这是所有GNU系统和几乎所有使用Linux内核的*NIX系统的实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接