您现在的位置是:首页 >其他 >ubuntu 20.04 aarch64 平台交叉编译 glib网站首页其他
ubuntu 20.04 aarch64 平台交叉编译 glib
glib 是什么?
- glib 是一个比较强大的 软件库,类似于 libc 库
 
交叉编译
- 当前需要移植到 aarch64(ARM64)平台上,需要使用 aarch64 交叉编译工具链编译 glib
 
环境准备
-  
ubuntu 20.04
 -  
安装较新版本的 meson : >= 0.60,我安装的是最新 meson 1.1.1
 -  
git clone glib 的最新仓库,当前的版本: v2.77,正式发布版本:v2.76
 
下载 glib
-  
可以在 glib 官方 git clone 拉取:地址 https://gitlab.gnome.org/GNOME/glib,感觉速度比较的慢
 -  
可以在 github 上拉取:https://github.com/GNOME/glib,github 不稳定,不过一旦连接上,速度还是挺快的
 
配置交叉编译
-  
编写 交叉编译的配置文件:这里使用
aarch64-linux-musleabi-gcc工具链,当然可以配置为其他的交叉编译工具链,如aarch64-linux-gnu-gcc -  
创建配置文件:cross_aarch64_musl.txt,内容如下
 
[host_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'
[properties]
c_args = []
c_link_args = []
[binaries]
c = 'aarch64-linux-musleabi-gcc'
cpp = 'aarch64-linux-musleabi-g++'
ar = 'aarch64-linux-musleabi-ar'
ld = 'aarch64-linux-musleabi-ld'
objcopy = 'aarch64-linux-musleabi-objcopy'
strip = 'aarch64-linux-musleabi-strip'
pkgconfig = 'aarch64-linux-gnu-pkg-config'
 
-  
安装 并升级 meson
$ sudo apt install meson -  
升级 meson 到 0.60 版本以上:
 
sudo apt install python3-pip
pip3 install meson==0.63
 
安装 aarch64-linux-gnu-pkg-config
sudo apt install pkg-config-aarch64-linux-gnu
配置 aarch64 交叉编译工具链
-  
下载并解压 aarch64 交叉编译工具链,然后配置环境变量:
 -  
可以修改
/etc/profile,后面添加 
export PATH=$PATH:/home/rtt/smart/gnu_gcc/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin
- 然后 
source /etc/profile使能环境变量 
编译 glib
- 编译步骤
 
meson --prefix=/home/rtt/smart/libs/glib_libs --cross-file cross_aarch64_musl.txt builddir
ninja -C builddir
ninja -C builddir install
 
-  
这里
--prefix=/home/rtt/smart/libs/glib_libs是 glib 生成的 lib 库的 install 的目录,因为是交叉编译编译,不能直接安装到PC 系统的目录下,需要实际指定 -  
这里
--cross-file cross_aarch64_musl.txt是上面创建的 meson 交叉编译的配置文件,如果 gcc 交叉编译工具链不同,可以修改 -  
ninja -C builddir编译,builddir就是一个目录,用于存放编译的文件 -  
ninja -C builddir install,编译完成后, 产物在builddir目录,还有很多的临时文件, install 可以复制到--prefix=/home/rtt/smart/libs/glib_libs指定的目录下,【备注】交叉编译的 glib 库,不能安装到主机系统的路径下,如 /usr/lib 目录 
编译的产物
-  
meson 构建时,会下几个子仓库,如果下载失败,可以多试几次
 -  
编译的产物如下:
 
zhangsz@zhangsz:~/rtt/glib/libs/lib$ ls
gio              libgio-2.0.so.0.7700.0      libgobject-2.0.so           libpcre2-16.so.0       libpcre2-8.so.0.11.0
glib-2.0         libglib-2.0.so              libgobject-2.0.so.0         libpcre2-16.so.0.11.0  libpcre2-posix.so
libffi.so        libglib-2.0.so.0            libgobject-2.0.so.0.7700.0  libpcre2-32.so         libpcre2-posix.so.3
libffi.so.7      libglib-2.0.so.0.7700.0     libgthread-2.0.so           libpcre2-32.so.0       libpcre2-posix.so.3.0.2
libffi.so.7.1.0  libgmodule-2.0.so           libgthread-2.0.so.0         libpcre2-32.so.0.11.0  libz.so
libgio-2.0.so    libgmodule-2.0.so.0         libgthread-2.0.so.0.7700.0  libpcre2-8.so          pkgconfig
libgio-2.0.so.0  libgmodule-2.0.so.0.7700.0  libpcre2-16.so              libpcre2-8.so.0
 

-  
库与头文件都在了
 -  
自此,编译完成
 
小结
-  
当前最新版本的 glib,如 v2.77 版本,编译起来还是比较的顺利的,meson 构建过程会自动拉取依赖的子模块,如 libz、libffi、libpcre2 等,存放在 glit 的
subprojects目录下 -  
glib 的功能还是比较强大的,仓库自带很多的测试用例:如 glib 子目录
glib/tests下,存放glit子模块的 测试用例,可以用于验证 glit 功能 
            




U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结