更新(WSL2)

更新(WSL2)

我有一个用标志编译的非常简单的应用程序g++ -m32

不幸的是,当我尝试运行它时出现错误:

bash: ./a.out: cannot execute binary file: Exec format error

如果没有编译则-m32没有错误并且它会按预期运行。

这可能是一个什么问题?有可能解决吗?

编辑:

  1. 编译并g++ -m32 --static不能解决问题。
  2. 安装是 Windows 10 上的 Ubuntu 子系统。

答案1

更新(WSL2)

WSL2 在真实的虚拟机中运行用一个真正的Linux内核,因此实际上可以执行 Linux VM 可以执行的任何操作,包括运行 32 位代码。只需运行以下命令安装 32 位库:

sudo dpkg --add-architecture i386
sudo apt-get update

但同样,你应该选择 64 位版本,特别是如果你有源代码的话。32 位 Linux 的维护比 64 位版本少得多,因为过去十年中 32 位硬件的数量少得多,用户和测试人员的数量也少得多。一个例子是 32 位 Linux 的 Meltdown/Spectre 补丁半年多后才问世比 64 位版本更高,并且几年后它仍然有问题


原始答案

你根本就不能这么做。WSL 不支持 32 位应用程序!

过去十年中,大多数(如果不是全部)英特尔和 AMD CPU 都支持 x86_64 指令集,微软没有理由花时间和金钱来支持 32 位版本的 Linux。无论如何,大多数开发人员和 Ubuntu 用户都在运行 64 位版本

不,我们目前不支持 x86 32 位:我们目前依赖仅限 x64 的指令和机制来确保快速稳定的性能。

Windows 上的 Ubuntu 上的 Bash


答案2

除了 wsl 2 的答案之外,我还必须安装,sudo apt-get install gcc-multilib以便 libc6 已安装并且可以执行 ELF 32 位

相关内容