저는 Raspberry Pi 3에서 간단한 "Hello World" C 프로그램을 컴파일하여 AMD64 노트북으로 전송했습니다. 호기심에 실행했는데 실행될 것이라고는 예상하지 못했지만 다음과 같이 실행되었습니다.
$ uname -a
Linux 15ud490-gx76k 6.5.0-25-generic #25~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 20 16:09:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
$ file hello64
hello64: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=486ee1cde035cd704b49c037a32fb77239b6a1c2, for GNU/Linux 3.7.0, not stripped
$ ./hello64
Hello World!
이런 경우 어떻게 구현하나요?
QEMU 사용자 에뮬레이션이 설치되어 있지만 그 역할을 하는지는 모르겠습니다.
답변1
QEMU 사용자 에뮬레이션은 바로 바이너리가 실행되는 이유입니다. 시스템에 설치하는 QEMU 관련 패키지 중 하나는 QEMU가 에뮬레이트할 수 있는 모든 아키텍처에 대한 핸들러로 등록되도록 하고 커널은 바이너리를 여기에 전달합니다. 바이너리는 필요한 라이브러리(있는 경우)가 있는 한 실행됩니다. 바이너리는 정적으로 링크되어 있으므로 외부 종속성이 없습니다.
바라보다BusyBox 정적으로 컴파일된 ARM 바이너리가 x86_64 PC에서 실행되는 이유는 무엇입니까?그리고모노의 놀라운 점은 무엇인가요?더 알아보기.