下載及交叉編譯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 依賴 zlib、libffi 和一個可用的 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