如何为 i386 编译静态二进制文件?

如何为 i386 编译静态二进制文件?

我正在尝试使用 i386 的 GCC 静态编译一些代码(dosfstools),使用-static-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 机器上运行,并给出错误“非法指令”。命令objdump mkfs.fat -D | grep cmove显示该二进制文件具有 cmove 指令,这些指令直到 i686 才引入,因此它不是生成的 i386 二进制文件。对 /usr/lib/i386-linux-gnu/libc.a 运行命令可以看到同样的结果。

答案1

Linux 发行版很久以前就不再支持真正的 386。要构建在真正的 386 上运行的二进制文件,您必须使用旧的发行版,或者重建您的工具链和任何您需要的库(假设现在仍然可以构建这样的设置)。

最后一个支持 386 的 Debian 版本是 Debian 3.0 (Woody)。

相关内容