下载及交叉编译glib,记录

发布于:2025-08-16 ⋅ 阅读:(14) ⋅ 点赞:(0)

下载及交叉编译glib,记录

编译参见这篇博客

嵌入式arm交叉编译移植bluez5.0最新教程_bluez移植-CSDN博客

编译命令有更新:

make -j4 CFLAGS="-Wno-format-overflow"

glib库的作用:

glib 是 GNOME 项目下的一个基础库,但实际上它不仅仅服务于 GNOME,它提供了很多 Linux/Unix 下通用的底层功能。它的作用可以总结为几个方面:


1、数据结构与工具函数

  • 提供 动态数组(GArray)、链表(GList)、哈希表(GHashTable)、字符串工具(GString) 等数据结构。

  • 包含许多 内存管理、错误处理、文件操作、字符串处理 的通用函数。

  • 让开发者无需重复造轮子,提高开发效率。


2、事件循环与异步支持

  • 提供 GMainLoop / GMainContext / GSource,可以管理事件循环,处理定时器、IO、信号等异步事件。

  • GTK、BlueZ 等多线程或异步程序的核心依赖


3、跨平台抽象

  • 抽象了很多平台差异,使程序 可在 Linux、Windows、macOS 等平台移植

  • 包含线程(GThread)、原子操作(GAtomic)、定时器、互斥锁等跨平台 API。


4、类型系统与对象系统(GObject)

  • GObject 是 GLib 提供的对象系统,支持:

    • 类和对象

    • 信号与回调

    • 属性系统

  • 很多 GNOME 应用和库(如 GTK、GStreamer)都基于 GObject 构建。


5、国际化与工具支持

  • 字符编码转换(GConvert)、本地化支持(gettext 集成)

  • 配置文件、路径查找等工具函数

1、下载 GLib 源码

可以从 GNOME 官方或者源码镜像下载稳定版本,例如 2.76.x:

wget https://download.gnome.org/sources/glib/2.76/glib-2.76.3.tar.xz 

tar xf glib-2.76.3.tar.xz 

cd glib-2.76.3

2、安装依赖

GLib 依赖 zliblibffi 和一个可用的 Python 环境(用于 gobject-introspection,可选)。如果你已经交叉编译好了 zlib 和 libffi,就可以直接使用它们。


3、设置交叉编译环境
export CC=arm-v01c02-linux-musleabi-gcc 
export AR=arm-v01c02-linux-musleabi-ar 
export RANLIB=arm-v01c02-linux-musleabi-ranlib 
export STRIP=arm-v01c02-linux-musleabi-strip 


# 设置交叉编译 sysroot(zlib、libffi 等依赖所在路径) 
export SYSROOT=/home/zhs/tools/blue_2/sysroot 

export PKG_CONFIG_PATH=$SYSROOT/usr/lib/pkgconfig:$SYSROOT/usr/share/pkgconfig 

export PKG_CONFIG_LIBDIR=$SYSROOT/usr/lib/pkgconfig 

export PKG_CONFIG_SYSROOT_DIR=$SYSROOT

注意:你必须把之前交叉编译的 zlib/libffi 安装到 $SYSROOT/usr,这样 GLib 才能找到。


4、生成构建目录

建议使用 独立构建目录

mkdir -p build_arm 

cd build_arm

5、配置 GLib

GLib 2.x 使用 Meson 构建系统(新版本),旧版本 2.45 之前用 autotools。这里以 Meson 为例:

meson setup \
--prefix=/home/zhs/tools/blue_2/glib-arm-install \
--cross-file=arm-cross.txt \
builddir

arm-cross.txt 示例(Meson 交叉文件)


[binaries] c = '/home/zhs/tools/blue_2/toolchain/arm-v01c02-linux-musleabi-gcc' ar = '/home/zhs/tools/blue_2/toolchain/arm-v01c02-linux-musleabi-ar' strip = '/home/zhs/tools/blue_2/toolchain/arm-v01c02-linux-musleabi-strip' [properties] sys_root = '/home/zhs/tools/blue_2/sysroot' [host_machine] system = 'linux' cpu_family = 'arm' cpu = 'armv7' 


# 根据你的目标 CPU 调整 endian = 'little'

6、编译 & 安装
meson compile -C build_arm 


meson install -C build_arm

安装完成后,你会在 /home/zhs/tools/blue_2/glib-arm-install 下得到:


bin/ # 可执行工具 

lib/ # libglib-2.0.a / .so 

include/ # 头文件 

share/ # pkgconfig

7、编译提示
  • 确保 zlib/libffi 已经交叉编译并在 PKG_CONFIG_PATH

    Meson 会检查 pkg-config,确保交叉库的 .pc 文件可用
    
    旧版本 GLib(2.45 之前)用 ./configure,交叉编译方法类似 zlib:设置 CC/AR/RANLIB 并指定 --prefix


网站公告

今日签到

点亮在社区的每一天
去签到