Linux可执行文件是否与OS X"兼容"?

bgr*_*nks 24 c linux macos executable compilation

如果你在基于Linux的平台上编译一个程序,比如C,然后移植它来使用MacOS库,它会起作用吗?

核心机器代码是来自兼容Mac和Linux的编译器吗?

我问这个的原因是因为两者都是"基于UNIX的"所以我认为这是真的,但我不太确定.

Tom*_*Tom 32

不,Linux和Mac OS X二进制文件不是交叉兼容的.

首先,Linux可执行文件使用一种名为ELF的格式.

Mac OS X可执行文件使用Mach-O格式.

因此,即使许多库通常在每个系统上单独编译,它们也不能以二进制格式移植.

此外,Linux实际上不是基于UNIX的.它确实与UNIX共享许多常见功能和工具,但其中很多都与POSIX等计算标准有关.

编辑:

最后,为了解决您对字节码的看法:在制作二进制文件时,编译器通常会生成特定于您正在开发的平台的机器代码.(情况并非总是这样,但通常是这样.)


Chr*_*isJ 6

通常,您可以轻松地跨各种Unix品牌移植程序。但是,您(至少)需要在每个平台上重新编译它。

可执行文件(二进制文件)在多个平台上不可用,因为可执行文件与操作系统的ABI(应用程序二进制接口)紧密结合,即应用程序与操作系统进行通信的约定。

例如,如果您的程序使用POSIX write调用将字符串打印到控制台上,则ABI指定:

  • 系统调用的完成方式(Linux曾经在x86上调用0x80软件中断,现在它使用特定的sysenter指令)
  • 系统电话号码
  • 函数的参数如何传输到系统
  • 任何对齐方式
  • ...

而且这在操作系统之间差异很大。

但是请注意,在某些情况下,可能会有“ ABI适配器”允许将一个OS的二进制文件运行到另一个OS上。例如Wine允许您在各种Unix风格上运行Windows可执行文件,NDISwrapper允许您在Linux上使用Windows网络驱动程序。