-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)でした。