首页 > 解决方案 > 如何为 i386 编译静态二进制文件?

问题描述

我正在尝试使用 GCC 为 i386 静态编译一些代码(dosfstools),使用-staticand -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 运行命令也可以看到同样的情况。

标签: linuxgcccompilationdebianglibc

解决方案


推荐阅读