【glib学习笔记】之0 基本环境搭建

1. 简介

glib (注意不是glibc)是一个常用的c语言库,据我所知GNOME、GTK、Gstreamer、Qemu等都或多或少使用到了这个它。这个库里面包含了丰富的功能,比如常用数据结构与算法的实现、网络基础库、事件监听、线程相关、gobject(实现了类的概念)等等。

2. glib库编译方法[ref]

这里我们需要编译glib,glib的代码托管在GNOME的gitlab上面,并且至今一直在频繁更新,写这个文档时已经到了2.63。

https://gitlab.gnome.org/GNOME/glib

这里我们直接抓最新的code来编译。最新的库基于meson来build,而不是Makefile

这个库编译期间可能会自动下载libffizlib库,另外还对libmount-devperlpkg-config等库有依赖。

还有需要注意的是gcc和binutils的版本不能太旧,可能导致build failed,比如编译会用到objcopy 的–add-sym这个option,旧版本objcopy不存在这个选项。

下面是详细步骤

1) 下载

git clone https://gitlab.gnome.org/GNOME/glib

2)安装meson 环境

apt install python3-pip
python3 -m pip install meson
python3 -m pip install ninja 

3)编译 command,进入glib 的root 目录

meson _build
ninja -C _build
ninja -C _build install    # 这一步会将build好的库安装到 /usr/local/ 目录

4)大致看看安装的目录

头文件
/usr/local/include/glib-2.0/
gio  glib  glib-object.h  glib-unix.h  glib.h  gmodule.h  gobject

so文件
root@gstreamer:/map/projs/gstreamer/glib# ls /usr/local/lib/x86_64-linux-gnu
glib-2.0     libffi.so.7.1.0  libgio-2.0.so.0.6301.0  libglib-2.0.so.0.6301.0  libgmodule-2.0.so.0.6301.0  libgobject-2.0.so.0.6301.0  libgthread-2.0.so.0.6301.0
libffi.so    libgio-2.0.so    libglib-2.0.so          libgmodule-2.0.so        libgobject-2.0.so           libgthread-2.0.so           libz.so
libffi.so.7  libgio-2.0.so.0  libglib-2.0.so.0        libgmodule-2.0.so.0      libgobject-2.0.so.0         libgthread-2.0.so.0         pkgconfig

.pc 文件
root@gstreamer:/map/projs/gstreamer/glib# ls /usr/local/lib/x86_64-linux-gnu/pkgconfig/
gio-2.0.pc  gio-unix-2.0.pc  glib-2.0.pc  gmodule-2.0.pc  gmodule-export-2.0.pc  gmodule-no-export-2.0.pc  gobject-2.0.pc  gthread-2.0.pc  libffi.pc  zlib.pc

3. glib app的编写

3.1 使用glib库需要包含相对应功能的头文件,

glib.h, glib-object.h, gio.h,gmodule.h, glib-unix.h, glib/gi18n-lib.h or glib/gi18n.h, glib/gprintf.h and glib/gstdio.h

3.2 另外需要指定相关的编译参数,按照依赖的模块,在gcc 编译参数加入如下部分或者全部

pkg-config --cflags --libs gobject-2.0
pkg-config --cflags --libs gmodule-no-export-2.0
pkg-config --cflags --libs gmodule-2.0
pkg-config --cflags --libs glib-2.0

相关链接如下:https://developer.gnome.org/glib/stable/glib-compiling.html

3.3 下面是一个简单的打印时间日期的例子,说明编译app的方法。

1)编译命令

gcc main.c `pkg-config --cflags glib-2.0 --libs glib-2.0`

2)main.c

#include <locale.h>
#include <glib.h> // 这里引用了glib的头文件

int
main (int argc, char *argv[])
{
  gchar *fmt;
  GDateTime *dt;
  gchar *str;

  setlocale (LC_ALL, "");

  if (argc > 1)
    fmt = argv[1];
  else
    fmt = "%x %X";

  dt = g_date_time_new_now_local (); // glib的函数大都以 g_ 开头
  str = g_date_time_format (dt, fmt);
  g_print ("%s\n", str);
  g_free (str);
  g_date_time_unref (dt);

  return 0;
}

Page Counter

发布了1 篇原创文章 · 获赞 0 · 访问量 45

猜你喜欢

转载自blog.csdn.net/iamfinehqhq/article/details/104238037