轉(zhuǎn)自:
http://my.oschina.net/moooofly/blog/126260
http://nieyong.github.io/wiki_ny/glibc,%20eglibc%E5%92%8C%20glib%E7%9A%84%E5%8C%BA%E5%88%AB.html
【glibc 和 libc】
glibc 和 libc 都是 Linux 下的 C 函數(shù)庫。
libc 是 Linux 下的 ANSI C 函數(shù)庫;glibc 是 Linux 下的 GUN C 函數(shù)庫。
ANSI C 和 GNU C 有什么區(qū)別呢?
ANSI C 函數(shù)庫是基本的 C 語言函數(shù)庫,包含了 C 語言最基本的庫函數(shù)。這個庫可以根據(jù)頭文件劃分為 15 個部分,其中包括:
<ctype.h>:包含用來測試某個特征字符的函數(shù)的函數(shù)原型,以及用來轉(zhuǎn)換大小寫字母的函數(shù)原型;
<errno.h>:定義用來報告錯誤條件的宏;
<float.h>:包含系統(tǒng)的浮點數(shù)大小限制;
<math.h>:包含數(shù)學(xué)庫函數(shù)的函數(shù)原型;
<stddef.h>:包含執(zhí)行某些計算 C 所用的常見的函數(shù)定義;
<stdio.h>:包含標(biāo)準(zhǔn)輸入輸出庫函數(shù)的函數(shù)原型,以及他們所用的信息;
<stdlib.h>:包含數(shù)字轉(zhuǎn)換到文本,以及文本轉(zhuǎn)換到數(shù)字的函數(shù)原型,還有內(nèi)存分配、隨機數(shù)字以及其他實用函數(shù)的函數(shù)原型;
<string.h>:包含字符串處理函數(shù)的函數(shù)原型;
<time.h>:包含時間和日期操作的函數(shù)原型和類型;
<stdarg.h>:包含函數(shù)原型和宏,用于處理未知數(shù)值和類型的函數(shù)的參數(shù)列表;
<signal.h>:包含函數(shù)原型和宏,用于處理程序執(zhí)行期間可能出現(xiàn)的各種條件;
<setjmp.h>:包含可以繞過一般函數(shù)調(diào)用并返回序列的函數(shù)的原型,即非局部跳轉(zhuǎn);
<locale.h>:包含函數(shù)原型和其他信息,使程序可以針對所運行的地區(qū)進行修改。
地區(qū)的表示方法可以使計算機系統(tǒng)處理不同的數(shù)據(jù)表達約定,如全世界的日期、時間、美元數(shù)和大數(shù)字;
<assert.h>:包含宏和信息,用于進行診斷,幫助程序調(diào)試。
上述庫函數(shù)在其各種支持 C 語言的 IDE 中都是有的。
GNU C 函數(shù)庫是一種類似于第三方插件的東西。由于 Linux 是用 C 語言寫的,所以 Linux 的一些操作是用 C 語言實現(xiàn)的,因此,GUN 組織開發(fā)了一個 C 語言的庫 以便讓我們更好的利用 C 語言開發(fā)基于 Linux 操作系統(tǒng)的程序。 不過現(xiàn)在的不同的 Linux 的發(fā)行版本對這兩個函數(shù)庫有不同的處理方法,有的可能已經(jīng)集成在同一個庫里了。
glibc是linux下面c標(biāo)準(zhǔn)庫的實現(xiàn),即GNU C Library。glibc本身是GNU旗下的C標(biāo)準(zhǔn)庫,后來逐漸成為了Linux的標(biāo)準(zhǔn)c庫,而Linux下原來的標(biāo)準(zhǔn)c庫Linux libc逐漸不再被維護。Linux下面的標(biāo)準(zhǔn)c庫不僅有這一個,如uclibc、klibc,以及上面被提到的Linux libc,但是glibc無疑是用得最多的。glibc在/lib目錄下的.so文件為libc.so.6。
查看當(dāng)前系統(tǒng)的 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 |
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. |
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 |
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>. |
2.
1 | [root@Betty ~]# ldd --version |
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. |
【glibc 和 glib】
錯誤觀點:glib 前面有個 "g" ,所以認(rèn)為 glib 是 GNU 的東東;同時認(rèn)為 glibc 是 glib 的一個子集。
其實,glib 和 glibc 基本上沒有太大聯(lián)系,可能唯一的共同點就是,其都是 C 編程需要調(diào)用的庫而已。
glib 是 Gtk+ 庫和 Gnome 的基礎(chǔ)。glib 可以在多個平臺下使用,比如 Linux、Unix、Windows 等。glib 為許多標(biāo)準(zhǔn)的、常用的 C 語言結(jié)構(gòu)提供了相應(yīng)的替代物。
glib是GTK+的基礎(chǔ)庫,它由基礎(chǔ)類型、對核心應(yīng)用的支持、實用功能、數(shù)據(jù)類型和對象系統(tǒng)五個部分組成,可以在[http://www.gtk.org gtk網(wǎng)站]下載其源代碼。是一個綜合用途的實用的輕量級的C程序庫,它提供C語言的常用的數(shù)據(jù)結(jié)構(gòu)的定義、相關(guān)的處理函數(shù),有趣而實用的宏,可移植的封裝和一些運行時機能,如事件循環(huán)、線程、動態(tài)調(diào)用、對象系統(tǒng)等的API。GTK+是可移植的,當(dāng)然glib也是可移植的,你可以在linux下,也可以在windows下使用它。使用gLib2.0(glib的2.0版本)編寫的應(yīng)用程序,在編譯時應(yīng)該在編譯命令中加入pkg-config --cflags --libs glib-2.0,如:
gcc pkg-config --cflags --libs glib-2.0 hello.c -o hello
使用glib最有名的就是GNOME了。
【官方說明】
Glib
GLib is a general-purpose utility library, which provides many useful data types, macros, type conversions, string utilities, file utilities, a main loop abstraction, and so on. It works on many UNIX-like platforms, Windows, OS/2 and BeOS. GLib is released under the GNU Library General Public License (GNU LGPL).
The general policy of GLib is that all functions are invisibly threadsafe with the exception of data structure manipulation functions, where, if you have two threads manipulating the same data structure, they must use a lock to synchronize their operation.
GLib is the low-level core library that forms the basis for projects such as GTK+ and GNOME. It provides data structure handling for C, portability wrappers, and interfaces for such runtime functionality as an event loop, threads, dynamic loading, and an object system.
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.
【其他說法】
libc 實際上是一個泛指。凡是符合實現(xiàn)了 C 標(biāo)準(zhǔn)規(guī)定的內(nèi)容,都是一種 libc 。
glibc 是 GNU 組織對 libc 的一種實現(xiàn)。它是 unix/linux 的根基之一。
微軟也有自己的 libc 實現(xiàn),叫 msvcrt 。
嵌入式行業(yè)里還常用 uClibc ,是一個迷你版的 libc 。
【yasi】
libc, glibc在一個層次,都是C的標(biāo)準(zhǔn)實現(xiàn)庫,是操作系統(tǒng)級別的基石之一。
glib是用C寫的一些utilities,即C的工具庫,和libc/glibc沒有關(guān)系。