如何做网站网页流程,网站建设和网络推广是干嘛,石家庄网站定做,网络优化软件前言 由于打算交叉编译 python#xff0c;但是依赖 libffi 库#xff0c;也就是 libffi 库也需要交叉编译 环境#xff1a; ubuntu 20.04 交叉编译工具链#xff1a;这里使用 musl libc 的 gcc 交叉编译工具链#xff0c;aarch64-linux-musleabi-gcc#xff0c;gcc 版本…前言 由于打算交叉编译 python但是依赖 libffi 库也就是 libffi 库也需要交叉编译 环境 ubuntu 20.04 交叉编译工具链这里使用 musl libc 的 gcc 交叉编译工具链aarch64-linux-musleabi-gccgcc 版本 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\--buildaarch64-linux-musleabi \--hostaarch64-linux \--targetaarch64-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 平台 zhangszzhangsz:~/python/tools/build_libffi/_build/lib64$ ls -la
total 216
drwxrwxr-x 2 zhangsz zhangsz 4096 1月 23 22:56 .
drwxrwxr-x 6 zhangsz zhangsz 4096 1月 23 22:56 ..
-rw-r--r-- 1 zhangsz zhangsz 104808 1月 23 22:56 libffi.a
-rwxr-xr-x 1 zhangsz zhangsz 970 1月 23 22:56 libffi.la
lrwxrwxrwx 1 zhangsz zhangsz 15 1月 23 22:56 libffi.so - libffi.so.8.1.2
lrwxrwxrwx 1 zhangsz zhangsz 15 1月 23 22:56 libffi.so.8 - libffi.so.8.1.2
-rwxr-xr-x 1 zhangsz zhangsz 145000 1月 23 22:56 libffi.so.8.1.2zhangszzhangsz:~/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 strippedlibffi 最新 github 上的版本交叉编译成功生成了 相应的库
小结 交叉编译 libffi 还是相对比较简单如果 libffi 源码没有 configure 配置脚本需要 autoconf 工具生成 注意有的 gcc 交叉编译工具链没有 Linux 的头文件这部分可以使用相应工具链中的头文件代替比如 #include linux/limits.h 改为 #include limits.h