ubuntu 20.04 aarch64 平台交叉编译 libffi 库

news2024/11/24 12:56:29

前言

  • 由于打算交叉编译 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/bash

cross_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.2

zhangsz@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.coloradmin.cn/o/1405879.html

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

相关文章

【心得】java反序列化漏洞利用启蒙个人笔记

目录 前置基础概念 java的反序列化利用概念baby题 例题1 例题2 java反序列化启蒙小结&#xff1a; URLDNS链 一句话总结&#xff1a; 简单分析&#xff1a; 利用点&#xff1a; 示例&#xff1a; 前置基础概念 序列化 类实例->字节流 反序列化 字节流->类实…

大模型+自动驾驶

论文&#xff1a;https://arxiv.org/pdf/2401.08045.pdf 大型基础模型的兴起&#xff0c;它们基于广泛的数据集进行训练&#xff0c;正在彻底改变人工智能领域的面貌。例如SAM、DALL-E2和GPT-4这样的模型通过提取复杂的模式&#xff0c;并在不同任务中有效地执行&#xff0c;从…

1 认识微服务

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff1a;将业务的所有…

Checklist系列:MySQL自检五十五问,万字整理,推荐收藏

&#x1f680;最近也打算整理一波已经学过的知识&#xff0c;名字已经想好了就叫《CheckList》系列&#xff0c;以后需要用到的时候也可以拿出来看。问题来源于网上常见的面试题&#xff0c;问题的答案多以官网为主&#xff0c;每个问题我都贴了链接&#xff0c;觉得我写的不清…

Flink中的容错机制

一.容错机制 在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 1.1 检查点&#xff08;Checkpoint&#xff09; 在流处理中&#xff0c;我们可以用存档读档的思路&#xff0c;将之前某个时间点的所有状态保存下来&#xf…

世微AP2915宽电压无MOS管切换双色灯性价比方案

1&#xff1a;产品描述 AP2915 是一款可以一路灯串切换两路灯串的降压恒流驱动器,高效率、外围简单、内置功率管&#xff0c;适用于 5-100V 输入的高精度降压 LED 恒流驱动芯片。内置功率管输出功率可达 12W&#xff0c;电流 1.2A。AP2915 一路灯亮切换两路灯亮&#xff0c;其…

外包干了一个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

【GitHub项目推荐--不错的 C++开源项目】【转载】

01 C 那些事 这是一个适合初学者从入门到进阶的仓库&#xff0c;解决了面试者与学习者想要深入 C及如何入坑 C的问题。 除此之外&#xff0c;本仓库拓展了更加深入的源码分析&#xff0c;多线程并发等的知识&#xff0c;是一个比较全面的 C 学习从入门到进阶提升的仓库。…

用Axure RP 9制作弹出框

制作流程 1.准备文本框 下拉列表 按钮 动态面板 如图 2.先把下拉列表放好 再放动态面板覆盖 3.点动态面板 进入界面 如图 4.给按钮添加交互 3个按钮一样的 如图 5.提交按钮添加交互 如图

PyCharm安装PyQt5及工具Qt Designer程序UI界面的实现工具

1. 工具包安装 对于一个新创建的Python环境&#xff0c;首先需要安装PyQt的相关工具包&#xff0c;因为是Python的依赖包所有可以通过pip进行安装&#xff0c;由于我们在PyCharm中进行程序设计&#xff0c;这里我们可以通过PyCharm中的环境管理界面进行安装。 点击菜单栏“Fi…

Day 28 | 回溯 93.复原IP地址 、78.子集 、 90.子集II

93.复原IP地址 题目 文章讲解 视频讲解 思路&#xff1a;每轮开始的位置需要变化就需要设置start class Solution {List<String> result new ArrayList<>();public List<String> restoreIpAddresses(String s) {if (s.length() < 4 ||s.length() >…

[MySQL]基础的增删改查

目录 1.前置介绍 2.数据库操作 2.1显示当前数据库 2.2创建数据库 2.3 使用数据库 2.4 删除数据库 3.常用数据类型 3.1整型和浮点型 3.2字符串类型 4.表的操作 4.1查看表结构 4.2创建表 4.3删除表 5.重点 5.1操作数据库 5.2常用数据类型 5.3操作表 1.前置介绍 …

Python with Office 054 - Work with Word - 7-9 插入图像 (3)

近日详细学习了寒冰老师的很好的书《让Python遇上Office》&#xff0c;总结了系列视频。 这个是其中的一集&#xff1a;如何在Word中插入图像&#xff0c;我会陆续分享其他的视频并加上相应说明 https://www.ixigua.com/7319498175104942643?logTage9d15418663166a05d10

社区公益培训系统功能说明

社区公益培训系统功能说明 本系统将用于社区面向居民开展的公益培训课程展示&#xff0c;在线报名&#xff0c;并按班级排课上课&#xff0c;上课时学员要扫码签到&#xff0c;经常旷课的学员将禁止再报名其他课程。 1. 用户注册与登录 - 提供用户注册和登录功能&#xff0c;…

linux的kali安装,换源,更新包

下载kali kali.org进入官网后点第二个 然后点第一个 解压kali 下载后获得.7z压缩包&#xff0c;建议移动到合适自己电脑的位置进行解压&#xff0c;我喜欢放在D盘 启动kali 双击进入解压出的文件夹&#xff0c;将唯一一个.vmx文件用vmware打开&#xff08;没装的自行提前装…

《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(27)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置&#xff08;26&#xff09; 2.5 非透明PCI桥 本回将结合实例说明直接地址翻译过程。 2.5.2 通过非透明桥片进行数据传递 下文以图2-16中处理器x访问处理器y存储器地址空间的实…

基于SAM的视频标注

在本文中&#xff0c;我们将演示基础模型的应用&#xff0c;例如 Meta 的 Segment Anything 和 YOLOv8&#xff0c;以自动检测、分类和绘制视频中感兴趣对象的蒙版。这是之前指南的后续&#xff1a;使用 Meta 的 Segment Anything 和 YOLOv8 自动分类掩码。在本指南中&#xff…

MPU6050传感器—姿态检测

本节主要介绍以下内容&#xff1a; 姿态检测的基本概念 姿态传感器的工作原理及参数 MPU6050传感器介绍 实验&#xff1a;获取MPU6050原始数据 实验&#xff1a;移植官方DMP例程 一、姿态检测基本概念 1.1 姿态 在飞行器中&#xff0c;飞机姿态是非常重要的参数&#x…

SpringBoot打包成Docker镜像

SpringBoot打包成Docker镜像 1、第一种方式 1.1 编写一个springboot项目并且打包成jar包 package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestContr…

Python基础之数据库操作

一、安装第三方库PyMySQL 1、在PyCharm中通过 【File】-【setting】-【Python Interpreter】搜索 PyMySQL进行安装 2、通过PyCharm中的 Terminal 命令行 输入: pip install PyMySQL 注&#xff1a;通过pip安装&#xff0c;可能会提示需要更新pip&#xff0c;这时可执行&#…