如何在运行64位Linux的Armv8(AArch64)设备上编译运行32位二进制程序
问题解答
运行64位Linux的Armv8架构(含Cortex-A72)设备完全支持编译、运行32位AArch32(Arm32)二进制程序,你此前使用默认AArch64架构gcc添加-m32参数编译失败是正常现象:原生AArch64 gcc本身就不支持生成32位Arm代码,该参数仅适用于x86架构的gcc,和AArch64 gcc的编译参数无关。
操作步骤
一、配置32位程序运行环境
- 首先确认内核开启了兼容32位程序的支持,执行命令:
zcat /proc/config.gz | grep CONFIG_COMPAT
输出为CONFIG_COMPAT=y即代表支持,目前主流Arm64发行版的默认内核均已开启该配置。 - 安装32位基础运行库,以Debian/Ubuntu系列发行版为例,先添加armhf架构源:
sudo dpkg --add-architecture armhf && sudo apt update
再安装32位C运行库:sudo apt install libc6:armhf
若后续运行32位程序提示缺少依赖,对应安装[包名]:armhf格式的32位依赖包即可。配置完成后直接执行32位二进制文件即可正常运行。
二、编译32位程序
不要使用系统默认的AArch64 gcc,直接安装32位Arm编译器即可:
- 安装编译器包,以Debian/Ubuntu系列为例:
sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf - 编译时将原调用gcc的命令替换为
arm-linux-gnueabihf-gcc即可,示例:arm-linux-gnueabihf-gcc test.c -o test_32bit
编译生成的test_32bit就是可直接在当前设备运行的32位二进制程序。
如果使用RHEL/Fedora系列发行版,包名对应调整为gcc-arm-linux-gnueabihf、glibc-arm32-linux-gnu即可,操作逻辑一致。
内容的提问来源于stack exchange,提问作者Sp00nc3
相关产品推荐
相关产品推荐

