当前位置: 首页 > 工具软件 > GLib > 使用案例 >

1_01_GLib库入门与实践_GLib库简介

狄赞
2023-12-01

GLib库是用C语言实现的一个通用的、可移植的实用程序库,由GNOME的GTK小组开发并维护,最早用在GTK+程序开发上,后来被越来越多的程序所引用。刚开始,GLib库叫GLib-1.0,形成于约1995到1997年间,彼时提供的功能还比较少,后来于2002年升级到GLib-2.0,提供的功能也越来越丰富。截止目前,GLib的最新版本已经是GLib-2.56.4(当前最新:GLib-2.71.0,目前仍在更新)。

GLib-2.0库的三大组成部分

我们通常所说的GLib库一般都是指GLib-2.0库。GLib-2.0由三大部分组成——GLib、GObject和GIO,GLib是一套C语言工具集,GObject是基于C语言实现的对象系统、GIO是基于GLib和GObject的一套简单易用的VFS接口。GLib-2.0库的三个重要组成部分如下:

  • GLib:核心C程序库,包含了基础、核心应用支持、实用工具集、数据类型等内容。
  • GObject:一个基于C语言实现的对象系统,使C语言也可以面向对象编程。
  • GIO:基于GObject实现的一套便捷的vfs读写接口,包括文件操作、流操作、网络支持、TLS支持、D-Bus支持、应用支持等核心部分。

本系列文章只介绍GLib-2.0库的GLib部分,暂不涉及GObject和GIO。为了便于区分,本系列文章在提到GLib-2.0库时,所指为包含GLib、GObject和GIO三大部分的GLib-2.0库,在提到GLib库时,一般专指GLib-2.0库的GLib部分而不包括GObject和GIO,这样约定一下,既简单又清晰,不易有歧义。

GLib2.0库GLib部分主要功能

GLib-2.0的GLib部分提供了许多有用的数据类型、宏、类型转换、字符串实用程序、文件实用程序、主循环抽象等等,具体包含:字符串操作、文件操作、数据校验、编解码、字符集转换、随机数生成器、命令行解析器、xml解析器、正则表达式、单链表、双链表、 数组、指针数组、双端队列、哈希表、平衡二叉树、N维树、泛型、主循环、多线程、线程池、异步队列、内存分配、内存片段、错误系统、测试框架等等一系列功能。

GLib-2.0库与LGPL协议

GLib-2.0库遵循LGPL协议。如果只是对GLib-2.0库调用,而不修改其源码,则自己写的代码不需要开源;如果修改了GLib-2.0的源码,也只需要开源与GLib-2.0相关的修改部分,不需要开放全部源码。因此与GPL相比,LGPL是一个相当宽松的许可协议。

GLib-2.0的可移植性

GLib-2.0库具有可移植性,支持市面上常见的如i386、i686、x86_64、armv5、armv7、armv8、aarch64、mips、mips64el、alphaev5、alphaev6、powerpc、sparc、riscv32及s390等等一系列架构及指令集,这里只列举出了部分,具体支持的CPU及指令集类型,可查看源码根目录下的config.guess文件。

专题

什么是libc、glibc、glib,三者有何区别?

libc
ANSI组织1989年发布了第一版C语言标准,称为C89,该标准于1999年被国际标准化组织(ISO)接收为国际标准,遂称之为C90(后来国际标准化组织又于1999年和2011年分别发布了C99和C11两版C语言标准)。凡是实现了C语言标准规定的内容的C函数库都可以称为libc库。很多厂商或组织都基于C标准实现过libc库,较为著名的有GNU组织的glibc、微软的msvcrt及嵌入式行业里常用的uclibc。
glibc
glibc由GNU开发,在Linux系统下实现了C语言标准规定的内容,该套C函数库逐渐成为了Linux下的标准C库,原来Linux下的标准C库Linux libc逐渐不再维护了,因此现在Linux发行版自带的libc库基本都是glibc,查看版本信息时可以看到类似“GNU C Library (GNU libc) stable release version 2.xx”的字样。
glib
glib是由GNOME的GTK小组开发并维护,由基础类型、核心应用支持、实用功能、数据类型及对象系统等部分组成,是一个有综合用途的C语言工具库。

 类似资料: