编译 GLib 应用程序

编译 GLib 应用程序

要编译 GLib 应用程序,你需要告诉编译器在哪里可以找到 GLib 头文件和库。这是通过 pkg-config 实用工具来完成的。

以下交互式 shell 会话演示了 pkg-config 的使用方式(系统上的实际输出可能 有所不同)

$ pkg-config --cflags glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
$ pkg-config --libs glib-2.0
-L/usr/lib -lm -lglib-2.0

有关 pkg-config 的更多信息,请参阅 pkg-config 网站。

如果你的应用程序使用或 GObject 特性,则它必须使用以下 pkg-config 调用返回的选项进行编译和链接

$ pkg-config --cflags --libs gobject-2.0

如果你的应用程序使用模块,则它必须使用以下 pkg-config 调用之一返回的选项进行编译和链接

$ pkg-config --cflags --libs gmodule-no-export-2.0
$ pkg-config --cflags --libs gmodule-2.0

两者之间的区别在于 gmodule-2.0 向链接器标志添加了 --export-dynamic,而这通常是 不需要的。

编译程序最简单的方法是使用 shell 的“反引号”特性。如果你将一条命令放在反引号(而不是单引号)中,那么它将在执行前将其输出替换到命令行中。因此,要编译 GLib Hello, World,你可以键入以下内容

$ cc `pkg-config --cflags glib-2.0` hello.c -o hello `pkg-config --libs glib-2.0`

已废弃的 GLib 函数已经过注释,以便在使用时让编译器发出警告(例如,使用 GCC,你需要使用 -Wdeprecated-declarations 选项)。如果这些警告有问题,可以通过定义预处理程序符号 GLIB_DISABLE_DEPRECATION_WARNINGS 来关闭它们,方法是使用命令行选项 -DGLIB_DISABLE_DEPRECATION_WARNINGS

GLib 弃用注释已过版本化;通过定义宏 GLIB_VERSION_MIN_REQUIREDGLIB_VERSION_MAX_ALLOWED,你可以指定要使用的 GLib 版本的 API 范围。在此范围之前弃用或在此范围之后引入的 API 将触发编译器 警告。

自 GLib 2.62 起,使用预处理程序符号 G_DISABLE_DEPRECATED 从编译器完全隐藏弃用的接口的较旧弃用机制已被删除。现在,所有弃用都使用以上 机制进行处理。

使用 GLib 的推荐方法始终只有包括顶层头文件 glib.hglib-object.hgio.h。从 2.32 开始,GLib 通过在直接包括单个头文件时生成一个错误来强制执行这一点。

不过,也有一些例外;必须分别包括以下头文件

  • gmodule.h
  • glib-unix.h
  • glib/gi18n-lib.hglib/gi18n.h(请参阅 国际化 一节)
  • glib/gprintf.hglib/gstdio.h(我们不想将所有 stdio 拉到一起)