认识
官网:https://www.gtk.org/
文档:https://gitlab.gnome.org/GNOME/glib/#documentation
仓库:https://gitlab.gnome.org/GNOME/glib/
GLib 是一个轻量级、综合用途的 C 程序库,最初从 GTK 中剥离而来,现已成为 GTK 和 GNOME 等项目的底层核心基础库。它通过提供 C 语言常用的数据结构、处理函数、实用宏以及可移植性封装,极大地扩展了 C 标准库的功能。此外,GLib 还提供了事件循环、线程、动态加载和对象系统等运行时功能的 API,确保了其出色的跨平台能力,无论是在 Linux 还是 Windows 系统上均可无缝使用。简单来说,GLib 是 C 语言标准库 (glibc) 的强大补充和扩展。它提供系列跨平台的数据结构、类型、宏、工具和辅助函数。GLib 是 GNOME 项目的基础核心库,但它远不止服务于 GNOME。其为 Linux 和跨平台开发提供基础功能的、成熟且强大的工具库。
组成
Glib Core
最核心的基础设施。基本类型定义、内存分配、错误处理、字符串工具、命令行选项解析等。
GObject
提供了面向对象的、基于类的 C 语言编程框架。这是 GTK 等库的基石,实现了类、继承、多态、信号(回调机制)、属性等特性。
GIO
现代、便捷的应用程序 I/O 抽象层。提供了文件操作、网络编程(sockets)、进程间通信(D-Bus)、异步 I/O、输入 / 输出流、设置存储等高级接口。
GModule
跨平台的动态模块(插件)加载支持。允许应用程序在运行时加载共享库(如 .so 或 .dll 文件)并调用其中的函数。
性质
其由五个部分组成:基础类型、对核心应用的支持、实用功能、数据类型、对象系统
- 可移植性 (Portability):C 标准库在不同平台(如 Linux, Windows, macOS)上存在差异和行为不一致。GLib 提供了一套统一的、行为一致的 API,让你写一次代码,就能在多个平台上编译运行。
- 丰富的数据结构:C 标准库缺少像动态数组、链表、哈希表、队列、树等高级数据结构。GLib 高效地实现了这些常用数据结构。
- 事件循环与异步编程:GLib 提供了一个强大的 主事件循环 (Main Event Loop) 机制,这是构建事件驱动型应用程序(如图形界面程序、网络服务器)的基石。它允许你处理 I/O 事件、超时、空闲任务等,而不需要多线程。
- 线程与同步:GLib 提供了跨平台的线程抽象、线程池、互斥锁、条件变量等,简化了多线程编程。
- 实用工具:它包含了大量处理错误、字符串操作、文件路径、日期时间、内存分配、命令行选项解析等日常任务的实用函数。
构建
可以在 GTK 网站下载其源代码。
使用 glib 最有名的就是 GNOME 环境。
Q:GObject and GLib?
A:尽管 GObject 有自己独立的文档集,并且通常编译成自己的共享库文件。但是 GObject 的源代码驻留在 GLib 源代码树中,并与 GLib 一起分发。所以,GObject 使用 GLib 的版本号,并且通常与 GLib 一起打包(例如,Debian 将 GObject 放入其 libglib2.0 软件包系列中);
应用
- GTK 的基石:GTK 创建了 GNOME、XFCE 等桌面环境及其应用程序的著名图形界面库,完全构建在 GLib 和 GObject 之上。没有 GLib,就没有 GTK。
- 超越 GUI:虽然因 GTK 而闻名,但 GLib 本身是一个非图形的库。你完全可以用它来编写命令行工具、守护进程、网络服务等任何类型的应用程序。
- 高性能与稳定性:GLib 经过了数十年的发展和优化,其数据结构和算法都非常高效和可靠,被用于许多关键的任务型软件中。
- 丰富的生态系统:基于 GLib/GObject 的库(如 GTK, GStreamer, Pango, ATK 等)形成了一个强大且一致的开发生态系统。它们之间可以很好地协同工作。
参考
https://www.linuxfromscratch.org/blfs/view/svn/general/glib2.html
DeepSeek / 介绍 GLib