发现很多人没有搞清楚这两个东西.有个错误的观点:认为Glib是GNU的东东.(因为前面那个"g"),而Glibc是Glib的一个子集.
其实,Glib和Glibc基本上没有太大的联系,可能唯一的共同点就是他们都是UNIX下C编程调用的库而已. Glib是GTK+调用的底层核心库.(GTK+由开发GIMP的一些工具包集合发展而来).GIMP和Gnome这样的图形界面程序都是基于GTK+的.
大家都知道C本身缺少数据结构,和一些重要的处理函数,C本身最复杂的数据结构也就是数组了.那么当你需要一个数据结构的话就自己得定义.幸好前人已经帮我们完成这个工作.他们把这写常用的数据结构和处理方法包装成一个库.其中之一就是Glib了.Glib中 定义了很多有用的数据结构.如数组(长度可变),单(双)向链表,hash表,队列,还有关系(学过关系型数据库的都应该知道这个概念).一些常用的处理 方法如:字符串的处理,标准输出(g_print等),错误输出,日志记录,为了portable而定义的一些基本数据类型(gint,gchar, guint等)极其他们的限制,还有事件循环,线程,IO操作等.
GTK+和如今的多数GUI编程语言一样,基于消息传递与事件处理(GTK+里用信号,和消息的本质是一样的,只不过是前人帮我们定义好了而已).象 JAVA一样,GTK+中为我们定义好了容器,面板,组件等器件,调用就行了.而他本身又调用了Glib的好多东西.
Glibc是GNU开发的C库,和libc中好多东西重复.
---------------------------------------------------------------------------
glibc和libc都是Linux下的C函数库,
libc是Linux下的ANSI C的函数库;
glibc是Linux下的GUN C的函数库;
ANSI C和GNU C有什么区别呢?
ANSI
C是基本的C语言函数库,包含了C语言最基本的库函数。这个库可以根据 头文件划分为 15 个部分,其中包括:
<ctype.h>:包含用来测试某个特征字符的函数的函数原型,以及用来转换大小写字母的函数原型;
<errno.h>:定义用来报告错误条件的宏;
浮点常数 (<float.h>):包含系统的浮点数大小限制;
数学常数
(<math.h>):包含数学库函数的函数原型;
标准定义 (<stddef.h>:包含执行某些计算C所用的常见的函数定义;
标准 I/O (<stdio.h>):包含标准输入输出库函数的函数原型,以及他们所用的信息;
工具函数
(<stdlib.h>):包含数字转换到文本以及文本转换到数字的函数原型,还有内存分配、随机数字以及其他实用函数的函数原型;
字符串操作 (<string.h>)、:包含字符串处理函数的函数原型;
时间和日期
(<time.h>):包含时间和日期操作的函数原型和类型;
可变参数表 (<stdarg.h>):定义宏,用于处理未知数值和类型的函数的参数列表;
信号 (<signal.h>):包含函数原型和宏,用于处理程序执行期间可能出现的各种条件;
非局部跳转
(<setjmp.h>):包含可以绕过一般函数调用并返回序列的函数的原型;
本地信息 (<locale.h>):包含函数原型和其他信息,使程序可以针对所运行的地区进行修改。地区的表示方法可以使计算机系统处理不同的数据表达约定,如全世界的日期、时间、美元数和大数字
程序断言 (<assert.h>)
:包含宏和信息,用于进行诊断,帮助程序调试。这在其他的C语言的IDE中都是有的。
而GNU
C函数库是一种类似于第三方插件的东西,由于Linux是用C语言写的,所以Linux的一些操作是用C语言实现的,所以GUN组织开发了一个C语言的库
用于我们更好的利用C语言开发基于Linux操作系统的程序。其实我们可以把它理解为类似于Qt是一个C++的第三方函数库一样。
不过现在的不同的Linux的发行版本对这两个函数库有不同的处理方法,有的可能已经集成在同一个库里了,例如Ubuntu就只有glibc。