在运行 64 位 linux 的 Armv8 (aarch64) 上编译并运行 32 位二进制文件
Posted
技术标签:
【中文标题】在运行 64 位 linux 的 Armv8 (aarch64) 上编译并运行 32 位二进制文件【英文标题】:Compile and run a 32bit binary on Armv8 (aarch64) running 64bit linux 【发布时间】:2021-09-01 10:07:01 【问题描述】:我正在尝试使用 gcc 编译器在 Cortex-A72 Armv8 上编译和运行 32 位二进制文件,但我无法做到。我关注了这个先前的线程Having trouble compiling 32-bit binary on 64-bit linux armv8 machine,我也意识到 ARMv8 linux 机器不支持 -m32 标志。 看了https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html,没发现什么有趣的东西。
根据https://linux.die.net/man/1/arm-linux-gnu-gcc,AArch64 gcc 选项是:
-mbig-endian -mlittle-endian -mgeneral-regs-only -mcmodel=tiny -mcmodel=small -mcmodel=large -mstrict-align -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer -mtls-dialect=desc -mtls-dialect=traditional -march=name -mcpu=name -mtune=name
所以我的问题是:是否可以在 64 位 linux Armv8 机器上编译和运行 32 位二进制文件?是这样,怎么样?
谢谢。
编辑:这个https://jensd.be/1126/linux/cross-compiling-for-arm-or-aarch64-on-debian-or-ubuntu为我工作
【问题讨论】:
使用针对 Aarch32 的 GCC 版本,而不是主机的默认版本。 @Michael 有什么建议吗?我使用的是 10.2.1 版本 要么为你的 Linux 发行版找到一个现有的包,要么自己从源代码构建 GCC。 【参考方案1】:您可以从Cortex-A toolchain Arm site 下载带有硬浮点 (arm-none-linux-gnueabihf) 工具链的 AArch32 目标。
存档文件名为gcc-arm-10.2-2020.11-aarch64-arm-none-linux-gnueabihf.tar.xz,位于AArch64 Linux 托管的交叉编译器部分。
您可能需要在 Aarch64 系统上安装其他软件包 - 搜索 如何在 64 位 (arm64) 上运行 32 位 (armhf) 二进制文件 和您的 Linux 发行版名称。
【讨论】:
以上是关于在运行 64 位 linux 的 Armv8 (aarch64) 上编译并运行 32 位二进制文件的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Raspberry pi 3 编译 ARMv8 代码