什么是libc?它包含哪些功能?我们怎样才能得到它的源代码?

时间:2013-12-05 09:43:52

标签: c standards standard-library libc libm

根据Wikipedia,有许多基于操作系统和编译器的标准C库变体。 参考:http://en.wikipedia.org/wiki/C_standard_library

  1. 但我想了解在单个库中定义了在不同标头中声明的大量函数(例如:stdio.h,string.h,stdlib.h等)。所有这些头文件的源代码文件是否相同,或者stdio.h,string.h等有不同的库?由于我是编程的初学者,我不知道多个源代码文件是否可以生成像可执行文件这样的单个库。如果可能,那么我可以理解libc包含所有标准头文件的定义。我在哪里可以看到标准C库的源代码?

  2. 是静态库还是动态库?如果我的环境(OS / IDE)中存在两个版本,当我在源代码中包含任何标准头文件时,会将其链接起来。它依赖于IDE吗?但是对于gcc,程序员没有明确地包含libc。

  3. libc是标准C库的标准名称吗?

  4. 在Windows操作系统/环境中它是否已经存在?如果它存在,它的名称是什么(仅限libc)?

  5. 是否有其他标准C库如libm?

1 个答案:

答案 0 :(得分:2)

  1. 一般来说,标题(.h)文件包含函数和变量的声明。实现文件(.c)包含声明函数的实际实现。由于可以将多个实现文件转换并链接到单个库二进制文件中,因此您可以拥有一个包含多个标头的库。许多C库实现都是开源的,您可以在相关的项目页面上查看它们的源代码。 GNU libcRedHat newlib是最突出的。我相信人们会在评论中添加更多内容。

  2. 实施定义。您可以将相同的源转换为静态库或动态库。在您的系统上安装这两个版本并不罕见。由于几乎每个可执行文件都需要libc,因此默认情况下它通常会添加到链接器输入中,因此您不必向每个命令行添加-lc

  3. 没有。标准C库的标准名称是“标准C库”。请注意,几乎所有标准库的实现都使用非标准函数扩展库。即使它们是标准库的一部分,它们仍然是非标准的。 (alloca()让人想起。)

  4. MSVCRT.dll或其他一些,如果我没记错的话。

  5. libm代表标准库的数学部分,默认情况下不会添加到链接器输入,因为它很少需要。只有一个标准C库,即ISO / IEC 9899语言标准(因此名称)描述的库。还有许多其他库可以很容易地被假定存在于给定系统中,但只有ISO / IEC文档中描述的是“标准”。