-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을 지원하는 마지막 데비안 버전은 데비안 3.0(Woody)이었습니다.