glibc、glib和gnulib区别--转帖

来源:互联网 发布:static php 编辑:程序博客网 时间:2024/04/30 13:44


All three are used for completely different tasks.
这个应该理解成:三者各自适合不同的开发场景;类比什么时候项目用C开发,什么项目又可以基于JVM用JAVA开发;

1. glibc
[ http://www.gnu.org/s/libc/ ]

任何类unix系统都需要一个C库,功能上包括系统调用与基本C函数。可以理解成实现C函数库一个最基本的库,也就是CRT(C Runtime C运行时库)。不同的平台上都各自有自己的C运行库,windows的包含在VC里;
重点:C语言基本库

2. gnulib
[ http://www.gnu.org/software/gnulib/ ]
GUN组织有一个美好的愿景:只要是遵守GNU POSIX标准开发的软件,可以运行在任何GNU POSIX标准操作系统上。当你需要开发POSIX标准的软件时,你自然先需要这么一个标准库,这就是GNULIB;现实中,各操作系统所提供的开发API甚至C标准函数都不是完全一样的。
重点:POSIX标准

3. glib
[ http://www.gtk.org/ ]
A. 理解GLib的关键在于了解它的历史,简单说来,GLib来自于GTK,GTK源自于GIMP.GIMP是GNU Image Manipulation Program(GNU图像处理程序)的缩写;
B. Glib是什么,有什么?Glib的开发并不与glibc冲突,Glib延伸了C的功能,添加了许多数据结果,添加了一些开发图形系统需要的一些消息处理机制…,它是GIMP组织在实际开发中不断地提炼出来的产物。
重点:GTK开发


原文链接: http://swordtian.d176.1stxy.net.cn/?p=329
版权所有: swordtan

另附好文
转自:
http://hi.baidu.com/zengzhaonong/blog/item/e3adcb2af9a1939b023bf673.html
inux下的X11图形系统介绍之GTK图形库

GTK
----------------------------------------------
    GTK(GIMP-The GNU Image Manipulation Program[图形编辑软件]工具箱,GIMP ToolKit)是一个功能强大而且快捷的开放源码图形库,用于UNIX/Linux上的XWindow系统,程序员可以用来创建按钮、菜单及其它图形对象,GTK最初是GIMP的专用开发库,后来发展为Linux下开发基于X Window图形界面应用程序的主流开发工具之一,其本身就是自由软件,是GNU工程的一部分,因此可以用GTK+开发开放源码软件、自由软件,甚至商业的、非自由的软件,GTK图形库使用一系列称为“构件(Widgets)”的对象来创建应用程序的图形用户接口。它提供了窗口、标签、命令按钮、开关按钮、检查按钮、无线按钮、框架、列表框、组合框、树、列表视图、笔记本、进度条等很多构件。使用C语言就可以用它们来构造丰富的用户界面程序。通常情况下,用GTK代表软件包和共享库,用GTK+代表GTK的图形构件集,现在的GTK+中,相对以前的GTK来说包含了更多的标准回调机制来替代信号机制,符号‘+’就是用于区别原先的版本和新版本。在Linux下使用GTK开发GUI程序用C语言完成,发展到后来可以使用绑定了C++语言的GTKmm工具来开发GUI程序,有关GTKmm的详细使用可参见相关书籍,此处不做详细的介绍。
    GTK是高层的库函数,它基本不使用Xlib库函数,而是使用函数库GDK和Glib。这种结构使得GTK可以更方便地移植到其它系统上,或使用与X Windows系统无关的图形库。下图是GTK库函数的结构图:
    |------------------------------|
    |                              |
    |               |--------------|
    | X Application |     GTK      |
    |               |--------------|
    |               | -GDK | GLIB -|
    |------------------------------|
    |                              |
    |         X Library            |
    |                              |
    |------------------------------|


GTK具有以下的一些特性:
----------------------------------------------
    1. 动态类型系统。
    2. 用C语言编写的对象系统,可实现继承、类型检验,以及信号/回调函数的基础结构。
    3. 类型和对象系统不是特别针对GUI的。
    4. GTKWidget对象使用对象系统,它定义了GTK+的图形组件的使用接口。
    5. 大量的GTK Widget子类(构件)。


GTK编程
----------------------------------------------
    要想用GTK编程,首先要保证系统中已经安装了GTK和Gnome库。编译安装GTK的过程很简单:
    1.下载(ftp://ftp.gtk.org)GTK安装包文件到指定目录,并解压,生成源码目录。
    2.进入源码目录,执行如下的操作。
    ./configure      //该命令会生成编译时所需的makefile文件
    make             //使用make命令来建立库。
    make install     //使用make install命令来安装库。
    Gnome的最新版本可以从http://www.gnome.org下载。取得新版本软件后,解压缩和安装的方法与GTK类似。安装好GTK及相关组件之后,就可以使用GTK来设计用户界面程序了。一般来讲,编写GTK程序主要有以下几个过程:
    1.初始化
    2.创建主窗口
    3.创建并加入子窗口
    4.设置组件回调
    5.显示窗口
    6.进入事件循环


Glib和GDK
----------------------------------------------
    Glib是一些与界面无关的函数构成的基本库,它定义了诸如基本类型、内存操作、定时器字符串操作等系列的函数以及一些宏定义。GDK是底层的图形函数库,它包含GTK所使用的基本图形操作函数,比如基本图元、颜色、事件处理、图像和位图、窗口、拖放函数等。
    GLib库提供了一系列函数(functions)和定义(definitions),在设计GDK和GTK程序时很有用.它提供了一些标准C函数库(standard libc)的替代函数,比如malloc,但在其他的系统上使用时有很多问题.


Linux系统的图形架构:
----------------------------------------------
普通PC的Linux操作系统架构如下:
    Linux Kernel + XLib + GLib + GNOME GNOME/GTK
    Linux Kernel + XLib + Qt   + KDE    KDE/Qt
而在一般采用Qt嵌入式操作系统的架构如下:
    Linux Embedded Kernel + Framebuffer + Qte + Qtopia


Glib与Glibc的区别:
----------------------------------------------
    发现很多人没有搞清楚这两个东西.有个错误的观点:认为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中好多东西重复.


Xlib
----------------------------------------------
    在X Window中, 最底层的函数库称之为Xlib, 它的地位就如同整个操作系统最底层的函数库是libc一样。 整个Xi18n的架构,也是Xlib里面实现的,Xlib中提供了许多处理多国语言显示跟输入的函数。

以下转自:
http://blog.sina.com.cn/s/blog_51e68f8d0100aoi8.html
什么是GDK?
    GDK是标准Xlib函数调用的一个基本封装(wrapper),如果你对Xlib很熟悉,就不需要来重新熟悉绝大多数的GDK函数.所有的函数都是为了提供一个方便直观的风格来访问Xlib函数库.另外,自从GDK使用GLib,在多平台上使用时,GDK变得更加的方便和安全.

 什么是GLib?
    GLib库提供了一系列函数(functions)和定义(definitions),在设计GDK和GTK程序时很有用.它提供了一些标准c函数库(standard libc)的替代函数,比如malloc,但在其他的系统上使用时有很多问题.

什么是GTK+?
   GTK+是一个小型而高效的控件库,具有Motif的外观和风格.实际上,它比Motif看起来好多了,它包含有基本的控件和一些很复杂的的控件:例如文件选择、控件和颜色选择控件. GTK+提供了一些独特的特性,(至少,我知道其他的控件库不提供他们),例如,按钮不提供标签,它包含了一个子控件,在很多的时候是一个标签,但是,这个子控件也可以是一个映射,图像或者任何其他的程序员想要的集合.在整个的库中,你随处可见这种伸缩性.
    Gnome的开发基础结构是围绕一组函数库的所有的内容都是用可移植的ANSI C语言写成的,可以用于所有类UNIX系统,与图形相关的函数库依赖于X Window系统
    Gnome函数库是最高层的。
    GTK+由两部分组成,GTK和GDK。 GTK层为C语言提供了一个对象模型,并为UI工具包提供了最基本的widget,它是上层GUI派生的基础。 GTK是依赖于GDK的GDK是Xlib的一个底层包装,Xlib库直接与X服务器对话。除了Xlib以外的任何部分都是基于GLib的,它是一个有用的C函数库,提供了很多实用程序和可移植的功能以及一组容易被C语言使用的容器。
   一个Gnome程序使用多个库组成的层次结构: Gnome库在最高层,包括帮助例程,类和特殊的widget,并为应用程序提供一个基础架构。 第二层是GTK,它是GTK+库的一部分。这个库提供了基本的工具包和widget来创建GUI应用程序。大多数GUI是直接用GTK编写的。GTK同时为Gnome库提供了一个功能强大的对象系统。 再下一层是GDK,它简单的对X函数库进行了包装,只有在我们进行特殊绘画或设置窗口的特殊属性的时候才会用到它. 最下面一层是Glib,它是C的一个实用程序库,包括可移植性和一些实用程序功能,以及一些容器类,例如:链表,可变数组,变长字符串,HASH(貌似是哈西表),缓存,一个事件循环和其他有用的结构