ubuntu 20.04 aarch64 平台交叉编译 libffi 库

前言

  • 由于打算交叉编译 python,但是依赖 libffi 库,也就是 libffi 库也需要交叉编译

  • 环境: ubuntu 20.04

  • 交叉编译工具链:这里使用 musl libc 的 gcc 交叉编译工具链,aarch64-linux-musleabi-gcc,gcc 版本 gcc version 12.2.0

下载 libffi 库

  • 这里直接通过 github 下载当前最新的 libffi 库

  • git clone https://github.com/libffi/libffi.git

  • 下载后,进入 libffi,默认源码中没有 configure 脚本,可以直接运行 libffi 源码中的 autogen.sh 脚本,自动生成 configure 配置脚本

  • 另外创建一个 libffi 库的 build 目录,可以放在 libffi 源码目录的外部,这样编译不会影响到 libffi 源码目录

  • 这里在 libffi 目录外部创建一个新目录:build_libffi,然后进入 build_libffi,创建一个 编译 libffi 库的脚本 build_aarch64.sh

  • 注意设置的 交叉编译工具链路径,交叉编译工具链的各个工具

#!/bin/bashcross_tool_path=/home/zhangsz/smart/gnu_tools/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin../libffi/configure \CC=${cross_tool_path}/aarch64-linux-musleabi-gcc \CXX=${cross_tool_path}/aarch64-linux-musleabi-g++ \AR=${cross_tool_path}/aarch64-linux-musleabi-ar \LD=${cross_tool_path}/aarch64-linux-musleabi-ld \READELF=${cross_tool_path}/aarch64-linux-musleabi-readelf \--prefix=$PWD/_build\--build=aarch64-linux-musleabi \--host=aarch64-linux \--target=aarch64-linux \--enable-shared \make
make install
  • 设置执行 权限 chmod 777 build_aarch64.sh

  • 执行脚本,开始配置与编译

编译报错问题

  • 编译过程中,提示 linux/limits.h 找不到,由于我当前使用的是 非 Linux gcc 交叉编译工具链,也就是 musl libc 的 gcc 交叉编译工具链,因此找不到 Linux 的头文件,这里简单改一下,把 linux/limits.h 改为 limits.h 即可

../libffi/src/tramp.c:55:10: fatal error: linux/limits.h: No such file or directory

在这里插入图片描述

在这里插入图片描述

  • 编译成功,生成了 libffi.so.8.1.2 库, ARM aarch64 平台

在这里插入图片描述


zhangsz@zhangsz:~/python/tools/build_libffi/_build/lib64$ ls -la
total 216
drwxrwxr-x 2 zhangsz zhangsz   4096 123 22:56 .
drwxrwxr-x 6 zhangsz zhangsz   4096 123 22:56 ..
-rw-r--r-- 1 zhangsz zhangsz 104808 123 22:56 libffi.a
-rwxr-xr-x 1 zhangsz zhangsz    970 123 22:56 libffi.la
lrwxrwxrwx 1 zhangsz zhangsz     15 123 22:56 libffi.so -> libffi.so.8.1.2
lrwxrwxrwx 1 zhangsz zhangsz     15 123 22:56 libffi.so.8 -> libffi.so.8.1.2
-rwxr-xr-x 1 zhangsz zhangsz 145000 123 22:56 libffi.so.8.1.2zhangsz@zhangsz:~/python/tools/build_libffi/_build/lib64$ file libffi.so.8.1.2
libffi.so.8.1.2: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, with debug_info, not stripped
  • libffi 最新 github 上的版本交叉编译成功,生成了 相应的库

小结

  • 交叉编译 libffi 还是相对比较简单,如果 libffi 源码没有 configure 配置脚本,需要 autoconf 工具生成

  • 注意有的 gcc 交叉编译工具链没有 Linux 的头文件,这部分可以使用相应工具链中的头文件代替,比如 #include <linux/limits.h> 改为 #include <limits.h>

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

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

相关文章

智谱AI官网再升级,GLM-4,智能体,AI作图长文档全部搞定

创建智能体 智能体体验中心 可以看到智谱AI也推出了自己的智能体&#xff0c;并且官方内置了丰富多样的智能体供大家免费体验。 GLM-4 原生支持自动联网、图片生成、数据分析等复杂任务&#xff0c;现开放体验中&#xff0c;快来开启更多精彩。写一篇《繁花》的影评&#xf…

[每日一题] 01.23 - 画矩形

画矩形 height,width,c,d input().split() height,width,d int(height),int(width),int(d) lis [c * width if d else c * (width - 2) c for i in range(height) ]lis: ##### # # # # ##### 或 # # # # # # # #if not d:print(c * width)for i in lis[1:-1…

编写Netty程序

编写代码 1.创建线程池 一般来说&#xff0c;我们会声明两个线程池&#xff0c;一个线程池用来处理Accept事件&#xff0c;一个是用于处理消息的读写事件。 // 用来处理Accept事件 EventLoopGroup bossGroup new NioEventLoopGroup(1); // 用来处理消息的读写时间 EventLoo…

1986-Minimum error thresholding

1 论文简介 《Minimum error thresholding》是由 Kittler 和 Illingworth 于 1986 年发布在 Pattern Recognition 上的一篇论文。该论文假设原始图像中待分割的目标和背景的分布服从高斯分布&#xff0c;然后根据最小误差思想构建最小误差目标函数&#xff0c;最后取目标函数最…

A - Streets of Working Lanterns - 2

警察阿纳托利再次监视一个无组织犯罪集团散布被禁止的亚洲绘画的巢穴。目前&#xff0c;犯罪分子还共享无线互联网&#xff0c;任何人都可以匿名使用。巢穴仍然只有一个入口&#xff0c;也是一个出口。当有人进入巢穴时&#xff0c;阿纳托利在他的记事本上写一个开口圆括号&…

JAVAEE初阶 网络编程(三)

TCP回显服务器 一. TCP的API二. TCP回显服务器的代码分析三. TCP回显服务器代码中存在的问题四. TCP回显服务器代码五. TCP客户端的代码六.TCP为基准的回显服务器的执行流程 一. TCP的API 二. TCP回显服务器的代码分析 这的clientSocket并不是表示用户端的层面东西&#xff0c;…

kubernets集群搭建

集群搭建 1.准备工作(所有节点都执行)1.1配置/etc/hosts文件1.2关闭防火墙1.3关闭selinux1.4关闭交换分区&#xff0c;提升性能1.5修改机器内核参数1.6配置时间同步1.7配置阿里云镜像源 2.安装docker服务(所有节点都执行)2.1安装docker服务2.2配置docker镜像加速和驱动 3.安装配…

【分布式技术】消息队列Kafka

目录 一、Kafka概述 二、消息队列Kafka的好处 三、消息队列Kafka的两种模式 四、Kafka 1、Kafka 定义 2、Kafka 简介 3、Kafka 的特性 五、Kafka的系统架构 六、实操部署Kafka集群 步骤一&#xff1a;在每一个zookeeper节点上完成kafka部署 ​编辑 步骤二&#xff1a…

如何在conda中的创建查询删除虚拟环境等

最近发现conda环境中有太多的虚拟环境&#xff0c;想要删除&#xff0c;重新创建管理。因此&#xff0c;查找资料后&#xff0c;记录如下&#xff1a; 一.创建虚拟环境 打开终端或命令提示符&#xff0c;并执行以下命令&#xff1a; bash conda create --name your_environ…

【GitHub项目推荐--微软开源的课程(Web开发课程/机器学习课程/物联网课程/数据科学课程)】【转载】

微软在 GitHub 开源了四大课程&#xff0c;面向计算机专业或者入门编程的同学。分别是 Web 开发课程、机器学习课程、物联网课程和数据分析课程。 四大课程在 GitHub 上共斩获 90K 的Star&#xff0c;每一课程包含 20 多小节&#xff0c;完成课程大约需要 12 周。每小节除了视…

中文自然语言处理(NLP)的命名实体识别(NER)任务常见序列标注方法

中文NLP的NER任务中的数据集序列标注方法&#xff0c;主要有以下几种常用的标注方案&#xff1a; BIO标注法&#xff08;Begin-Inside-Outside&#xff09;&#xff1a; B&#xff08;Begin&#xff09;表示实体的开始部分。I&#xff08;Inside&#xff09;表示实体的中间部分…

如何解决Xshell 连接不上虚拟机Ubuntu?

一、 在终端输入 sudo apt-get install openssh-server 二、 执行如下命令 sudo apt-get install ssh 三、 开启 ssh-server&#xff0c;输入密码 service ssh start 四、 验证&#xff0c;输入 ps -e|grep ssh&#xff0c;看到sshd成功 ps -e|grep ssh五、 连接

【Linux编辑器-vim使用】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、vim的基本概念 二、vim的基本操作 分屏操作&#xff1a; 三、vim正常&#xff08;命令&#xff09;模式命令集 四、vim末行&#xff08;底行&#xff09;模…

【经验分享】MAC系统安装R和Rstudio(保姆级教程)安装下载只需5min

最近换了Macbook的Air电脑&#xff0c;自然要换很多新软件啦&#xff0c;首先需要安装的就是R和Rstudio啦&#xff0c;网上的教程很多很繁琐&#xff0c;为此我特意总结了最简单实用的安装方式: 一、先R后Rstudio 二、R下载 下载网址&#xff1a;https://cran.r-project.org …

shell脚本基础演练

简介 Shell脚本是一种用于自动化执行一系列命令的脚本语言。在Unix和类Unix系统中&#xff0c;常见的Shell包括Bash、Zsh、Sh等。下面我将简要讲解Shell脚本的基本结构和一些常用写法&#xff0c;并附上一些标准的例子。 基础示例 基本结构 #!/bin/bash # 注释: 这是一个简…

什么是ORM思想?

1. ORM概念 ORM&#xff08;Object Relational Mapping&#xff09;对象关系映射模式&#xff0c;是一种技术&#xff0c;解决了面向对象与关系型数据库存互不匹配的现象。 ORM在业务逻辑层和数据库层之间充当了桥梁的作用。 2. ORM由来 在软件开发的过程中&#xff0c;通常…

python基础教程九 抽象三(函数参数续)

1. 关键字参数和默认值 前面使用的都是位置参数&#xff0c;因为它们的位置至关重要。本节介绍的技巧让你能完全的忽略位置。要熟悉这种技巧需要一段时间&#xff0c;但随着程序规模的增大&#xff0c;你很快就发现它很有用。 >>> def hello_1(greeting,name): ... …

力扣279. 完全平方数

动态规划 思路&#xff1a; 假设 dp[i] 为最少组成数 i 的平方数个数&#xff1b;则其上一个状态为 dp[i - j^2] 1&#xff0c;1 为 j^2&#xff1a; 即 i 的最少完全平方数 i - j^2 的最少完全平方数 1&#xff0c;其中 j^2 < i 为最接近 i 的平方数&#xff1b;初始值…

云计算管理-linux

1.权限 基本权限与归属 访问权限 读取&#xff1a;允许查看内容-read r 写入&#xff1a;允许修改内容-write w 可执行&#xff1a;允许运行和切换-excute x 对于文本文件&#xff1a; r读取权限&#xff1a;cat、less、grep、head、tail w写入权…

Ansible手册

Ansible常用命令 ansible ansible-config ansible-config list ansible-config dump ansible-config viewansible-connection ansible-console ansible-doc ansible-galaxy ansible-inventory ansible-playbook ansible-pull ansible-vault ansible myhost -m setup# 查看当…