i386用の静的バイナリをコンパイルする方法は?

i386用の静的バイナリをコンパイルする方法は?

-staticとを使用してi386用のGCCでいくつかのコード(dosfstools)を静的にコンパイルしようとしていますが、-march=i386名前にもかかわらず、ライブラリ(/usr/lib/i386-linux-gnu/libc.aなど)はi386ではありません。 「debian-10.7.0-i386-netinst.iso」と「Fedora-14-i386-netinst.iso」でコンパイルしようとしましたが、名前にもかかわらずi386ではありません。実際のi386ライブラリを入手するには?

コンパイルされたバイナリはmake CFLAGS="-march=i386" LDFLAGS="-march=i386 -static"i586システムで実行されず、「illegal Instruction」エラーが発生します。このコマンドは、objdump mkfs.fat -D | grep cmoveバイナリにi686まで導入されていないcmoveコマンドがあるため、生成されたi386バイナリではないことを示しています。 /usr/lib/i386-linux-gnu/libc.a に対してコマンドを実行して、同じ結果を表示できます。

答え1

Linuxディストリビューションはずっと前にtrue 386のサポートを停止しました。実際の386で実行されているバイナリをビルドするには、以前のディストリビューションを使用するか、ツールチェーンと必要なライブラリを再構築する必要があります(まだそのような設定をビルドすることが可能であると仮定)。

386をサポートする最後のDebianバージョンはDebian 3.0(Woody)でした。

関連情報