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

sun*_*sen 6 arm amazon-ec2

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

根据/sf/answers/3309228891/arm64aarch64参考相同的架构。

$ ./argon2 -h
-bash: ./argon2: cannot execute binary file: Exec format error
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 27

对于相同的硬件架构来说,仅仅拥有一个二进制文件是不够的;它还需要针对适当的软件平台。在 M1 上为 macOS 构建的二进制文件无法在 Debian 上运行,甚至在 M1 上运行(更不用说任何其他 ARM64 CPU)。

\n

您\xe2\x80\x99 收到的特定错误是因为您的二进制文件是Mach-O 二进制文件而产生的;Linux 系统需要 ELF 二进制文件。有适用于 Linux 的 Mach-O 加载器(请参阅如何在 armv7l 上执行二进制类型的 Mach-O?),但我不知道\xe2\x80\x99 是否允许你运行特定的二进制文件。

\n

(加载二进制文件只是第一步;您还需要任何支持库,并且可能存在系统调用模拟 \xe2\x80\x94 Maloader通过依赖 C 库来避免后者,将 macOS 程序绑定到主机本机 C库,需要一点翻译;这适用于任何不发出系统调用本身的程序。)

\n

  • 即使使用相同类型的二进制文件,Mac 和 Debian 之间的库和系统调用也会有所不同。这与 Windows 中的 x86 .exe 无法在 x86 Debian 上运行的原因相同,至少没有像 WINE 这样的转换层 (6认同)
  • 作为一名 Mac 用户,我使用 docker 解决了这个问题。IE 在运行 Linux 容器的 Mac 上的 docker for Desktop 中构建。 (4认同)