概述
GLib提供了版本信息,主要用在配置文件中对版本信息的检查,一般不使用在具体应用中。GLib的版本号格式为major.minor.micro,分别表示主版本号、副版本号、微版本号,越靠后更新频率越快,比如2.72.1。
版本检查
版本检查主要分为编译时compile time、运行时run time检查。如果程序中使用了已经被弃用的 API,将引发警告。
GLIB_CHECK_VERSION() 编译时检查
GLIB_CHECK_VERSION()只对版本号进行检查,检查指定版本号是否比编译的版本号新。兼容时返回TRUE,否则为FALSE。
#define GLIB_CHECK_VERSION(major,minor,micro)
比如,在glib2.32之后才有g_mutex_clear,之前只能使用g_static_mutex_free
void queue_cleanup(Tasyncqueue *queue) {
if (queue->lockmutex)
#if GLIB_CHECK_VERSION(2, 32, 0)
g_mutex_clear(&queue->mutex);
#else
g_static_mutex_free(&queue->mutex);
#endif
}
glib_check_version() 运行时检查
glib_check_version() 用于检查当前运行使用的库是否与指定版本兼容,兼容时返回NULL,不兼容则返回相关信息。检查包括两个方面:一是运行的库版本号要比指定的版本号要新,二是运行库要比指定的版本号库二进制兼容。
const gchar *
glib_check_version (guint required_major,
guint required_minor,
guint required_micro);
假设当前版本号为2.72.1,示例:
#include <glib.h>
extern const guint glib_major_version, glib_minor_version, glib_micro_version;
int main(int argc, char const *argv[]) {
g_print("runtime version = %d.%d.%d\n", glib_major_version, glib_minor_version, glib_micro_version);
g_print("compile version = %d.%d.%d\n", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
const gchar *result;
result = glib_check_version(2, 71, 0);
g_print("%s\n", result);
result = glib_check_version(2, 73, 0);
g_print("%s\n", result);
if (GLIB_CHECK_VERSION(2, 71, 0)) {
g_print("glib version is 2.71 or later\n");
}
if (GLIB_CHECK_VERSION(2, 73, 0)) {
g_print("glib version is 3.36 or later\n");
}
return 0;
}
// 输出:
runtime version = 2.72.1
compile version = 2.72.1
(null)
GLib version too old (micro mismatch)
glib version is 2.71 or later
边界检查
获取当前、上一个稳定版版号,使用GLIB_VERSION_CUR_STABLE
GLIB_VERSION_PREV_STABLE。
如果想对最低、最高版本进行限制,可以定义相应宏GLIB_VERSION_MIN_REQUIRED、GLIB_VERSION_MAX_ALLOWED。
忽略版本检查
如果想忽略对版本警告,可以通过定义宏GLIB_DISABLE_DEPRECATION_WARNINGS,且要放在导入 glib.h
库文件头之前。