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

2024-10-30 08:35:00
admin
原创
60
摘要:问题描述:如果您在基于 Linux 的平台上用 C 语言编译一个程序,然后移植它以使用 MacOS 库,它会起作用吗?来自编译器的核心机器代码是否与 Mac 和 Linux 兼容?我之所以问这个问题是因为两者都是“基于 UNIX”的,所以我认为这是正确的,但我不太确定。解决方案 1:不,Linux 和 Mac...

问题描述:

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

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

我之所以问这个问题是因为两者都是“基于 UNIX”的,所以我认为这是正确的,但我不太确定。


解决方案 1:

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

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

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

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

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

尽管如此,人们可以而且确实创造了非常酷的方法来解决交叉兼容性问题。

编辑:

最后,关于字节码的问题:在制作二进制文件时,编译器通常会生成特定于您正在开发的平台的机器代码。(情况并非总是如此,但通常如此。)

解决方案 2:

一般情况下,你可以很容易地跨各种 Unix 品牌移植程序。但是你(至少)需要在每个平台上重新编译它。

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

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

  • 系统调用是如何完成的(Linux 过去在 x86 上调用 0x80 软件中断,现在使用特定sysenter指令)

  • 系统调用号

  • 函数的参数如何传输到系统

  • 任何类型的对齐

  • ...

并且这在不同的操作系统中存在很大的差异。

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

解决方案 3:

“字节码”通常是指虚拟机执行的代码(例如 Java 或 Python)。C 被编译为机器代码,CPU 可以直接执行。机器语言是特定于硬件的,因此在英特尔芯片上运行的任何操作系统(甚至在 Windows 下)下都是相同的,但机器代码如何包装成可执行文件以及如何与系统调用和动态链接库集成的细节因系统而异。

因此,您不能将编译后的代码用于不同的操作系统。(但是,有些“交叉编译器”可以在一个操作系统上运行,但生成的代码却可以在另一个操作系统上运行)。

解决方案 4:

不存在“来自编译器的核心字节码”。只有机器码

虽然相同的机器指令可能适用于多种操作系统(只要它们在同一硬件上运行),但托管可执行文件的内容远不止于此,而且由于 Linux 的编译和链接的本机可执行文件与 BSD 或 Darwin 的运行时和库要求非常不同,因此您无法在另一个系统上运行一个二进制文件。

相比之下,Windows 二进制文件有时可以在 Linux 下执行,因为 Linux 既提供了适用于 Windows PE 格式的二进制格式加载器,也提供了广泛的 API 实现(Wine)。原则上,这个想法也可以在其他平台上使用,但我不知道有人为 Linux<->Darwin 编写过这个。如果您已经拥有源代码,并且它在 Linux 中编译,那么您很有可能在 MacOS 下编译它(当然是模块化 UI 组件)。

解决方案 5:

嗯,也许吧...但很可能不是。

但如果确实如此,那并不是“因为两者都是 UNIX”,而是因为:

  • 如今,Mac 电脑恰好使用相同的处理器(这在过去是非常不同的)

  • 你碰巧使用了一个完全不依赖任何库的程序(可能性很小)

  • 你恰好使用相同的运行时库

  • 您恰好使用了与两者兼容的加载器/二进制格式。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用