g++ -m32
フラグを使用してコンパイルされた非常に単純なアプリケーションがあります。
残念ながら、実行しようとするとエラーが発生します。
bash: ./a.out: cannot execute binary file: Exec format error
-m32
なしでコンパイルした場合、エラーは発生せず、期待どおりに実行されます。
何が問題になる可能性があり、それを解決することは可能ですか?
編集:
g++ -m32 --static
でコンパイルしても問題は解決しません。あなたは単にそれを行うことはできません。 WSLは32ビットアプリをサポートしていません!
過去10年間のほとんどの(すべてではないにせよ)IntelおよびAMD CPUはx86_64命令セットをサポートしており、32ビットバージョンのLinuxのサポートにMicrosoftが時間とお金を費やす理由はありません。とにかくほとんどの開発者とUbuntuユーザーは64ビットバージョンを実行しています
いいえ、現時点ではx86 32ビットはサポートされていません。現在、高速で安定したパフォーマンスを確保するには、x64のみの命令とメカニズムに依存しています。
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ビットバージョンよりも それでも数年後もバグがある