operating-system - 为什么特定 CPU 的可执行程序不能在 Linux 和 Windows 上运行?

标签 operating-system executable

像 exe 这样的可执行问题在 Linux 上不起作用(没有 wine)。编译源代码时,编译器会生成特定于特定 cpu 架构的目标代码。但是相同的应用程序不适用于具有相同 CPU 的另一个操作系统。我知道代码可能包含特定于操作系统的指令,这些指令会阻止可执行文件运行。但是一个简单的程序 2+2 呢?令人困惑的部分是机器代码阻止工作的 hell 。特定于cpu的机器代码对吗?如果我们剥离可执行文件格式,我们能否看到两个操作系统的相同机器代码(如 2 + 2)?

还有一个问题:汇编语言呢? Windows 和 Linux 是否对相同的 cpu 使用不同的汇编语言?

最佳答案

有很多不同之处。其中:

  • 可执行格式 :每个操作系统都要求二进制文件符合特定的二进制格式。对于 Windows,这是可移植可执行文件 (PE) 格式。对于 Linux,大部分时间都是 ELF(它也支持其他类型)。
  • 应用二进制接口(interface) :每个操作系统都定义了一组主要的系统功能以及程序调用它们的方式。这在 Linux 和 Windows 之间有着根本的不同。虽然在 x86 架构的 Linux 和 Windows 上计算 2 + 2 的指令是相同的,但应用程序的启动方式、打印输出的方式以及退出方式在操作系统之间是不同的。

  • 是的,x86 架构上的 Linux 和 Windows 程序都使用英特尔定义的 CPU 支持的指令集。

    关于operating-system - 为什么特定 CPU 的可执行程序不能在 Linux 和 Windows 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059605/

    相关文章:

    linux - WebDriverException : Message: 'chromedriver.exe' executable needs to be in PATH. - Selenium

    permissions - 以root身份拒绝可执行文件的权限

    x86 - 英特尔处理器的 TLB ASID 标签中有多少位?以及如何处理 'ASID overflow' ?

    c++ - Visual Studio : how to create a project that would compile 2 exe files?

    java - 从 SDK 中运行 java exe

    operating-system - 为什么主板之间的代码兼容?

    Python部署和/usr/bin/env可移植性

    memory - 未翻译数据读/写意味着什么?

    linux - 在操作系统中,为什么可加载内核模块(LKM)不需要调用消息传递来进行通信?

    c - 来自在子进程中使用 exec 运行的文件的两种方式通信