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/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>

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-24 07:28:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-24 07:28:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-24 07:28:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-24 07:28:04       20 阅读

热门阅读

  1. postman断言

    2024-01-24 07:28:04       31 阅读
  2. C#的WPF使用OFFICE库播放PPT

    2024-01-24 07:28:04       31 阅读
  3. 安全 专题

    2024-01-24 07:28:04       37 阅读
  4. PPTP和L2TP有什么区别

    2024-01-24 07:28:04       28 阅读
  5. python连接sql server查询数据输出excel

    2024-01-24 07:28:04       28 阅读
  6. 《设计模式的艺术》笔记 - 中介者模式

    2024-01-24 07:28:04       26 阅读
  7. C++引用

    C++引用

    2024-01-24 07:28:04      29 阅读
  8. stm32产品架构

    2024-01-24 07:28:04       42 阅读
  9. 设计高并发分布式锁架构的实用指南

    2024-01-24 07:28:04       38 阅读
  10. Angular: resolve 守卫

    2024-01-24 07:28:04       40 阅读