为什么在 M1 Mac (arm64) 上编译的二进制文件不能在 EC2 t4g.micro 实例 (aarch64) 上运行?

为什么在 M1 Mac (arm64) 上编译的二进制文件不能在 EC2 t4g.micro 实例 (aarch64) 上运行?

跑步氩气2在运行 Debian 的 AWS t4g.micro 实例上的 M1 Mac 上编译会引发以下错误。

根据https://stackoverflow.com/a/47274698/4579271arm64aarch64引用相同的架构。

$ ./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 库,并进行一些翻译;这适用于任何不发出系统调用本身的程序。)

相关内容