glib 是什么?
- glib 是一个比较强大的 软件库,类似于 libc 库
交叉编译
- 当前需要移植到 arm(ARM 32位)平台上,需要使用 arm 交叉编译工具链编译 glib
环境准备
-
ubuntu 20.04
-
安装较新版本的 meson : >= 0.60,如
meson 0.63
-
git clone glib 的最新仓库,当前的版本: v2.77,正式发布版本:v2.76
下载 glib
-
可以在 glib 官方 git clone 拉取:地址 https://gitlab.gnome.org/GNOME/glib,感觉速度比较的慢
-
可以在 github 上拉取:https://github.com/GNOME/glib,github 不稳定,不过一旦连接上,速度还是挺快的
配置交叉编译
-
编写 交叉编译的配置文件:这里使用
arm-linux-gnueabihf-gcc
工具链,版本gcc version 13.0.0 20221001
,建议使用较新的 gcc 交叉编译工具链版本 -
创建配置文件:cross_arm.txt,内容如下
[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'arm'
endian = 'little'
[properties]
c_args = []
c_link_args = []
[binaries]
c = 'arm-linux-gnueabihf-gcc'
cpp = 'arm-linux-gnueabihf-g++'
ar = 'arm-linux-gnueabihf-ar'
ld = 'arm-linux-gnueabihf-ld'
objcopy = 'arm-linux-gnueabihf-objcopy'
strip = 'arm-linux-gnueabihf-strip'
pkgconfig = 'arm-linux-gnueabihf-pkg-config'
-
安装 并升级 meson
$ sudo apt install meson
-
升级 meson 到 0.60 版本以上:
sudo apt install python3-pip
pip3 install meson==0.63
安装 arm-linux-gnueabihf-pkg-config
sudo apt install pkg-config-arm-linux-gnueabihf
下载配置 arm 交叉编译工具链
-
下载地址 https://snapshots.linaro.org/gnu-toolchain/,
-
也可以去ARM 官方下载 https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
-
下载并解压 arm 交叉编译工具链到指定的位置,然后配置环境变量:
-
可以修改
/etc/profile
,后面添加
export PATH=$PATH:/home/zhangsz/tools/gcc-linaro-13.0.0-2022.10-x86_64_arm-linux-gnueabihf/bin
-
注意arm 交叉编译工具链的路径是 gcc 交叉编译工具链实际存放的路径
-
然后
source /etc/profile
使能环境变量,可以输入arm-linux-gnueabihf-gcc -v
确认 gcc 交叉编译工具链是否生效
编译 glib
- 编译步骤
meson --prefix=/home/rtt/linux/libs/glib_libs -Ddefault_library=both --cross-file cross_arm.txt builddir
ninja -C builddir
ninja -C builddir install
-
这里
--prefix=/home/rtt/linux/libs/glib_libs
是 glib 生成的 lib 库的 install 的目录,因为是交叉编译编译,不能直接安装到PC 系统的目录下,需要实际指定存在的路径 -
这里
--cross-file cross_arm.txt
是上面创建的 meson 交叉编译的配置文件,如果 gcc 交叉编译工具链不同,可以修改 -
ninja -C builddir
编译,builddir
就是一个目录,用于存放编译的文件,可以ninja -C builddir -j8
启动多线程编译 -
ninja -C builddir install
,编译完成后, 产物在builddir
目录,还有很多的临时文件, install 可以复制到--prefix=/home/rtt/linux/libs/glib_libs
指定的目录下 -
【备注】交叉编译的 glib 库,不能安装到当前PC主机系统的路径下,如 /usr/lib 目录
编译的产物
-
当前最新版本的 glib 在 meson 构建时,会自动下载几个子仓库,如果下载失败,可以多试几次
-
编译的产物如下:
- 库与头文件都在了
zhangsz@zhangsz:~/linux/libs/glib_libs$ ls
bin include lib libexec share
- 自此,glib arm 平台交叉编译完成,此 glib 库 可适用于嵌入式 ARM Linux 系统中
小结
-
当前最新版本的 glib,如 v2.77 版本,meson 构建配置时,会自动拉取子模块,所以可能比较慢(注意国外网速),meson 构建过程会自动拉取依赖的子模块,如 libz、libffi、libpcre2 等,存放在 glit 的
subprojects
目录下 -
glib 的功能还是比较强大的,仓库自带很多的测试用例:如 glib 子目录
glib/tests
下,存放glit
子模块的 测试用例,可以用于验证 glit 功能