ubuntu 20.04 aarch64 平台交叉编译 glib

news2024/11/26 19:49:20

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 功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用大型语言模(LLM)构建系统(三):思维链推理

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程,我想和大家一起分享一下该门课程的一些主要内容。 下面是我们访问大型语言模(LLM)的主要代码: import openai#您的openai的api key openai.api_key YOUR-OPENAI-API-KEY def get_…

vue3中的插槽

目录 什么是插槽插槽的类型默认插槽具名插槽作用域插槽 插槽的默认内容动态组件中使用插槽插槽的组合使用插槽的高级用法插槽复用将动态组件作为插槽 插槽的优先级规则 什么是插槽 插槽是组件中用来承载内容的一种机制,可以让组件在运行时接受来自其它组件的任意内…

【后端面经-数据库】MySQL的存储引擎简介

【后端面经-数据库】MySQL的存储引擎简介 MySQL的存储引擎0. 存储引擎的查看和修改1. MyISAM2. InnoDB3. MEMORY4. MERGE5. 总结6. 参考博客 MySQL的存储引擎 mysql主要有四类存储引擎,目前主要使用InnoDB作为存储引擎。 0. 存储引擎的查看和修改 查看当前数据库…

Oracle子查询改写的几种方式

子查询定义 子查询是嵌套在另一个语句(如SELECT,INSERT,UPDATE或DELETE)中的SELECT语句。 通常,可以在任何使用表达式的地方使用子查询。 例子 比如从以下的病人信息中查询最近一个月住院年龄最大的病人信息 从以上的信息中我们知道病人出生日期BIRTHDATE ,限制取数的时…

chatgpt赋能python:Python二次方函数——优化您的SEO排名

Python二次方函数——优化您的SEO排名 如果您是一位拥有10年Python编程经验的工程师,您可能已经知道Python是一个强大的编程语言,虽然它不是专业的SEO工具,但是它可以用于优化SEO排名,尤其是当您需要通过Python编写一个二次方函数…

【计算机组成原理与体系结构】指令系统

目录 一、指令格式 二、扩展操作码 三、指令寻址 四、数据寻址 五、x86汇编指令 六、RISC-V架构 七、RV32I指令集 一、指令格式 根据地址码格式分类 根据操作类型进行分类 二、扩展操作码 三、指令寻址 指令寻址:下一条预执行指令的地址(始终有…

chatgpt赋能python:Python如何从右往左取数

Python如何从右往左取数 在Python编程中,有时候需要从右往左获取列表、字符串等数据结构的元素,而不是从左往右。这样做的好处在于可以更快地访问最后几个元素,或者进行一些反向操作。本文将介绍Python中从右往左取数的方法。 索引与切片 …

【DC综合】DC工具 report_timing 命令的一些选项

report_timing选项 report_timing 的全部参数[ -to to_list | -rise_to rise_to_list | -fall_to fall_to_list ][ -from from_list | -rise_from rise_from_list | -fall_from fall_from_list ][ -path_type short | full | full_clock | full_clock_expanded | only | end ][…

智能工厂元宇宙 工业互联网云平台的架构与功能解析

随着工业领域的数字化转型和物联网技术的发展,工业互联网云平台作为实现智能制造和工业自动化的关键技术之一,引起了广泛关注。工业互联网云平台通过将传感器数据、设备状态和生产信息等连接到云端,实现数据的采集、存储、分析和应用&#xf…

chatgpt赋能python:Python中如何一行输入多个数据

Python中如何一行输入多个数据 在Python中,我们有时需要一次性输入多个数据,作为程序的输入。常见的情况包括输入一组数字、输入多个字符串等。在本文中,我们将介绍多种方法来实现一行输入多个数据。 方法一:使用input函数 Pyt…

IP组播5_PIM-SM(ASM)详解

目录 1.PIM-SM(ASM)简介 2.PIM-SM(ASM)工作原理 2.1 什么是DR? 2.2 什么是RP? 2.2.1 静态RP 2.2.2 动态RP 2.3 组播源注册和RPT建立 2.4 SPT切换 3. PIM-SM(ASM)实验 3.1 …

【力扣刷题 | 第五天】

目录 前言: 15. 三数之和 - 力扣(LeetCode) 18. 四数之和 - 力扣(LeetCode) 结束: 前言: 今天两道题类型相似,解法思路一致,都利用了双指针技术。 15. 三数之和 - 力…

PostgreSQL数据库分区裁剪——enable_partition_pruning

在PostgreSQL 10版本之前,PostgreSQL数据库实际上是没有单独的创建分区表的DDL语句,都是通过表继承的原理来创建分区表,这样使得在PostgreSQL中使用分区表不是很方便,到PostgreSQL 10之后,PostgreSQL扩展了创建表的DDL…

idea插件开发-PSI

程序结构接口(Program Structure Interface)简称PSI,PSI是IDEA插件开发最复杂的一块内容,后续会有大量实战来强化理解此处的知识。PSI是IntelliJ 平台中的一个层,负责解析文件并创建语法和语义代码模型,为平…

Linux 导入MySQL数据库(四)

文章目录 一、导出数据库二、导入数据库(方法一)1. 通过FinalShell连接服务器,登录mysql:2. 新建数据库3. 使用新建的数据库4. 对数据库进行编码设置5. 从路径中导入 SQL 文件数据 三、导入数据库(方法二)【…

为uni-cloud(Dcloud国产之辉)声明!

目录 uni-cloud的介绍 uni-cloud与uni-app的关系 uni-cloud与云原生的关系 uni-cloud的开发优点 uni-cloud与HBuilder X结合的优越性 uni-cloud高效解决"高并发" uni-cloud与阿里云、腾讯云完美结合 uni-cloud背后庞大的插件市场 美中不足 加油&#xff01…

chatgpt赋能python:Python代码保存:如何保存你的Python代码?

Python代码保存:如何保存你的Python代码? Python被广泛认为是学习编程的入门语言之一,因为它易于学习和使用,并且拥有大量的库和框架来处理各种任务。 在编写Python代码时,你可能会像大多数编程任务一样,…

实践项目三: 校园兼职平台(合作重构版)

项目说明 1 据了解,目前在校大学生80%以上有做兼职的需求,兼职打工已经不仅仅是经济困难的学生赚取生活费用的途径。调查显示,全球经济危机对就业产生冲击,用人单位对人员的社会实践能力要求提高,大学期间必要的社会实…

Java学习笔记(StringJoiner和集合)

StringJoiner StringJoiner与StringBuilder一样,也可以看成是一个容器,创建之后的内容是可变的 作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用 构造方法: 方法名 说明 pub…

四、HAL_驱动机械按键

1、开发环境。 (1)KeilMDK:V5.38.0.0 (2)STM32CubeMX:V6.8.1 (3)MCU:STM32F407ZGT6 2、机械按键简介 (1)按键内部是机械结构,也就是内部是没有电路的。按键按下内部引脚导通,松开内部断开。 3、实验目的&原理…