c标准基本库函数:libc、glibc的关系

glibc 和 libc 都是 Linux 下的 C 函数库。 
libc 是 Linux 下的 ANSI C 函数库;glibc 是 Linux 下的 GUN C 函数库。 

ANSI C 和 GNU C 有什么区别呢? 

       ANSI C 函数库是基本的 C 语言函数库,包含了 C 语言最基本的库函数。这个库可以根据头文件划分为 15 个部分,其中包括: 

  1. <ctype.h>:包含用来测试某个特征字符的函数的函数原型,以及用来转换大小写字母的函数原型;
  2. <errno.h>:定义用来报告错误条件的宏;
  3. <float.h>:包含系统的浮点数大小限制;
  4. <math.h>:包含数学库函数的函数原型;
  5. <stddef.h>:包含执行某些计算 C 所用的常见的函数定义;
  6. <stdio.h>:包含标准输入输出库函数的函数原型,以及他们所用的信息;
  7. <stdlib.h>:包含数字转换到文本,以及文本转换到数字的函数原型,还有内存分配、随机数字以及其他实用函数的函数原型;
  8. <string.h>:包含字符串处理函数的函数原型;
  9. <time.h>:包含时间和日期操作的函数原型和类型;
  10. <stdarg.h>:包含函数原型和宏,用于处理未知数值和类型的函数的参数列表;
  11. <signal.h>:包含函数原型和宏,用于处理程序执行期间可能出现的各种条件;
  12. <setjmp.h>:包含可以绕过一般函数调用并返回序列的函数的原型,即非局部跳转;
  13. <locale.h>:包含函数原型和其他信息,使程序可以针对所运行的地区进行修改。
  14. 地区的表示方法可以使计算机系统处理不同的数据表达约定,如全世界的日期、时间、美元数和大数字;
  15. <assert.h>:包含宏和信息,用于进行诊断,帮助程序调试。
上述库函数在其各种支持 C 语言的 IDE 中都是有的。  

       GNU C 函数库是一种类似于第三方插件的东西。由于 Linux 是用 C 语言写的,所以 Linux 的一些操作是用 C 语言实现的,因此,GUN 组织开发了一个 C 语言的库   以便让我们更好的利用 C 语言开发基于 Linux 操作系统的程序。 不过现在的不同的 Linux 的发行版本对这两个函数库有不同的处理方法,有的可能已经集成在同一个库里了。  

glibc下载地址:http://mirror.hust.edu.cn/gnu/

glibc是linux下面c标准库的实现,即GNU C Library。glibc本身是GNU旗下的C标准库,后来逐渐成为了Linux的标准c库,而Linux下原来的标准c库Linux libc逐渐不再被维护。Linux下面的标准c库不仅有这一个,如uclibc(https://www.uclibc.org/)、klibc,以及上面被提到的Linux libc,但是glibc无疑是用得最多的。glibc在/lib目录下的.so文件为libc.so.6。


查看当前系统的 glibc 版本的两种方法:  
1.
01 [root@Betty ~]# /lib/libc.so.6
02 GNU C Library stable release version 2.5, by Roland McGrath et al.
03 Copyright (C) 2006 Free Software Foundation, Inc.
04 This is free software; see the source for copying conditions.
05 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
06 PARTICULAR PURPOSE.
07 Compiled by GNU CC version 4.1.2 20080704 (Red Hat 4.1.2-52).
08 Compiled on a Linux 2.6.9 system on 2013-01-08.
09 Available extensions:
10         The C stubs add-on version 2.1.2.
11         crypt add-on version 2.1 by Michael Glad and others
12         GNU Libidn by Simon Josefsson
13         GNU libio by Per Bothner
14         NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
15         Native POSIX Threads Library by Ulrich Drepper et al
16         BIND-8.2.3-T5B
17         RT using linux kernel aio
18 Thread-local storage support included.
19 For bug reporting instructions, please see:
20 <http://www.gnu.org/software/libc/bugs.html>.
21 [root@Betty ~]#
2.  
1 [root@Betty ~]# ldd  --version
2 ldd (GNU libc) 2.5
3 Copyright (C) 2006 Free Software Foundation, Inc.
4 This is free software; see the source for copying conditions.  There is NO
5 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
6 Written by Roland McGrath and Ulrich Drepper.

7 [root@Betty ~]#


Glibc 

Overview: 
Any Unix-like operating system needs a C library: the library which defines the ``system calls'' and other basic facilities such as open, malloc, printf, exit... 
The GNU C Library is used as the C library in the GNU systems and most systems with the Linux kernel.
Project Goals:  
The GNU C Library is primarily designed to be a portable and high performance C library. It follows all relevant standards including ISO C11 and POSIX.1-2008. It is also internationalized and has one of the most complete internationalization interfaces known.
History: 
The history of Unix and various standards determine much of the interface of the C library. In general the GNU C Library supports the ISO C and POSIX standards. We also try to support the features of popular Unix variants (including BSD and System V) when those do not conflict with the standards. Different compatibility modes (selectable when you compile an application) allow the peaceful coexistence of compatibility support for different varieties of Unix. 
aaron注: 翻译:

概述:
任何类似Unix的操作系统都需要一个C库:定义“系统调用”的库和其他基本工具,如OPEN、malloc、printf、Exit.GNU C库是GNU系统和大多数Linux内核系统中的C库。
项目目标:
GNU C库主要设计成一个可移植的高性能C库。它遵循所有相关标准,包括ISO C11和POSIX.1-2008。它也是国际化的,并且拥有已知的最完整的国际化接口之一。
历史:
Unix的历史和各种标准决定了C库的大部分接口。一般来说,GNU C库支持ISO C和POSIX标准。当流行的Unix变体(包括BSD和SystemV)与标准不冲突时,我们也尝试支持这些特性。不同的兼容性模式(在编译应用程序时可以选择)允许对不同类型的Unix提供兼容支持的和平共处。
【其他说法】  

libc 实际上是一个泛指。凡是符合实现了 C 标准规定的内容,都是一种 libc 。
glibc 是 GNU 组织对 libc 的一种实现。它是 unix/linux 的根基之一。
微软也有自己的 libc 实现,叫 msvcrt 。
嵌入式行业里还常用 uClibc ,是一个迷你版的 libc 。


猜你喜欢

转载自blog.csdn.net/weixin_37414365/article/details/80659697