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

2024-10-30 08:35:00
admin
原创
65
摘要:问题描述:如果您在基于 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 电脑恰好使用相同的处理器(这在过去是非常不同的)

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

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

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

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   609  
  在现代项目管理中,资源的有效利用是确保项目成功的关键因素之一。随着技术的不断进步,越来越多的工具和软件被开发出来,以帮助项目经理和团队更高效地管理资源。本文将介绍10款工具,这些工具可以帮助项目团队提升资源利用效率,从而实现项目目标。禅道项目管理软件禅道项目管理软件是一款开源的项目管理工具,广泛应用于软件开发和其他行业...
项目管理系统   3  
  在项目管理领域,软件工具的不断升级和创新是推动效率和协作的关键。2024年,众多项目管理软件将迎来一系列令人期待的升级功能,这些新特性不仅将提升团队的工作效率,还将增强用户体验和数据分析能力。本文将详细介绍10款项目管理软件的最新升级功能,帮助项目经理和团队成员更好地规划和执行项目。禅道项目管理软件禅道项目管理软件一直...
开源项目管理工具   2  
  信创国产系统的10个关键厂商及其技术生态随着全球信息技术格局的不断演变,信创(信息技术应用创新)产业作为国产化替代的重要阶段,正逐步成为推动我国信息技术自主可控、安全可靠的核心力量。信创产业不仅关乎国家信息安全,也是数字经济高质量发展的关键支撑。本文将深入探讨信创国产系统中的10个关键厂商及其技术生态,分析它们在信创浪...
项目管理流程   0  
  在探讨项目管理的广阔领域中,成功并非偶然,而是精心策划、高效执行与持续优化的结果。项目管理的成功之道,可以从明确的目标设定与规划、高效的团队协作与沟通、以及灵活的风险管理与适应变化这三个核心方面进行深入解析。每个方面都是项目成功的基石,它们相互交织,共同支撑起项目的顺利推进与最终成就。明确的目标设定与规划项目管理的首要...
建筑工程项目管理规范   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用