Ubuntu 22.10(amd64)无法在我新安装的计算机上执行任何 x32 二进制文件(x32:x32-ABI,请参阅https://en.wikipedia.org/wiki/X32_ABI).示例程序helloworld.c:
#include <stdio.h>
int main(argv) { printf("Hello World.\n"); }
生成的二进制文件失败如下(如果该二进制文件是在旧版 Ubuntu 上生成的,也是如此):
# gcc-12 -mx32 -o helloworld helloworld.c
# ./helloworld
-bash: ./helloworld: cannot execute binary file: Exec format error
如果我在 22.04 或任何较旧的 Ubuntu 版本上尝试生成的二进制文件,它会按预期工作。我的外部架构看起来不错:
# dpkg --print-foreign-architectures
i386
从 22.04 到 22.10 有相关变化吗?
答案1
我尝试了不同的内核版本并检查了它们的/boot/config-...
文件。Ubuntu 已在 Ubuntu 22.10 的 5.19 内核中删除了内核选项CONFIG_X86_X32
(主线内核 ppa 显示版本 5.17、5.18、6.0 也是如此)。因此,从 5.17 开始无法运行 x32 二进制文件,而 Ubuntu 22.10 有一个 5.19 内核。这很遗憾。
我在启动板上针对内核包提交了一个错误:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1994516
不幸的是,这个错误被标记为“无法修复”。因此,我们将把计算集群切换到另一个 Linux 发行版。