web-dev-qa-db-ja.com

LinuxのWindowsサブシステム上のUbuntuで32ビットアプリケーションを実行する

g++ -m32フラグを使用してコンパイルされた非常に単純なアプリケーションがあります。

残念ながら、実行しようとするとエラーが発生します。

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

-m32なしでコンパイルした場合、エラーは発生せず、期待どおりに実行されます。

何が問題になる可能性があり、それを解決することは可能ですか?

編集:

  1. g++ -m32 --staticでコンパイルしても問題は解決しません。
  2. セットアップは、Windows 10のUbuntuサブシステムです。
4
Alex

あなたは単にそれを行うことはできません。 WSLは32ビットアプリをサポートしていません!

過去10年間のほとんどの(すべてではないにせよ)IntelおよびAMD CPUはx86_64命令セットをサポートしており、32ビットバージョンのLinuxのサポートにMicrosoftが時間とお金を費やす理由はありません。とにかくほとんどの開発者とUbuntuユーザーは64ビットバージョンを実行しています

いいえ、現時点ではx86 32ビットはサポートされていません。現在、高速で安定したパフォーマンスを確保するには、x64のみの命令とメカニズムに依存しています。

Windows上のUbuntu上のBash


更新:

WSL2は実際の仮想マシンで実行されます実際のLinuxカーネル を使用するため、実際にはLinuxを実行することができますVM 32ビットのコードを実行しています。32ビットのlibをインストールするには、

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

しかし、繰り返しになりますが、特にソースコードがある場合は、64ビットバージョンを選択する必要があります。 32ビットLinuxは、64ビットバージョンよりも保守がはるかに少ないです。これは、過去10年間で32ビットのみのハードウェアがはるかに少なく、ユーザーとテスターの数が大幅に少ないためです。 1つの例は、32ビットLinuxのMeltdown/Spectreパッチ 半年以上後にリリースされました 64ビットバージョンよりも それでも数年後もバグがある

8
phuclv