M1 Mac(arm64)에서 컴파일된 바이너리가 EC2 t4g.micro 인스턴스(aarch64)에서 실행되지 않는 이유는 무엇입니까?

M1 Mac(arm64)에서 컴파일된 바이너리가 EC2 t4g.micro 인스턴스(aarch64)에서 실행되지 않는 이유는 무엇입니까?

달리기아르곤 2Debian을 실행하는 AWS t4g.micro 인스턴스의 M1 Mac에서 컴파일하면 다음 오류가 발생합니다.

~에 따르면https://stackoverflow.com/a/47274698/4579271, 동일한 스키마를 참조합니다 arm64.aarch64

$ ./argon2 -h
-bash: ./argon2: cannot execute binary file: Exec format error

답변1

단순히 동일한 하드웨어 아키텍처에 대한 바이너리를 갖는 것만으로는 충분하지 않으며 적절한 소프트웨어 플랫폼을 대상으로 해야 합니다. M1에서 macOS용으로 빌드된 바이너리는 Debian에서 실행되지 않으며 M1에서도 실행되지 않습니다(다른 ARM64 CPU는 물론).

귀하가 겪고있는 구체적인 오류는 바이너리가Mach-O 바이너리; Linux 시스템에는 ELF 바이너리가 필요합니다. Linux용 Mach-O 로더가 있습니다(참조:armv7l에서 바이너리 유형 Mach-O를 수행하는 방법은 무엇입니까?) 그러나 특정 바이너리를 실행할 수 있는지는 모르겠습니다.

(바이너리 로드는 첫 번째 단계일 뿐입니다. 지원 라이브러리도 필요하며 잠재적으로 시스템 호출 에뮬레이션도 필요합니다.말 로더C 라이브러리를 사용하여 macOS 프로그램을 호스트의 기본 C 라이브러리에 바인딩하고 일부 변환하여 후자를 피하세요. 이는 시스템 호출 자체를 실행하지 않는 모든 프로그램에서 작동합니다. )

관련 정보