一个 C 可执行文件 运行 可以在所有操作系统上运行吗
Can a C executable file run on all operating systems
如果我在操作系统中创建一个 C 可执行文件(例如:Windows),
此文件 运行 可以在其他操作系统上使用吗(如:Linux、Mac-OS)。
试图给出一个完整的答案,这将是一个理论上的 "yes" 非常大 "but"。
首先要了解的是:由 C 编译器创建的二进制可执行文件与由编译器为其他语言创建的二进制可执行文件在任何方面没有区别。因此,以下内容与 C 无关。
这有两个问题。操作系统有不同的文件格式来存储二进制文件(通常由代码、数据等部分组成,还有一些元信息告诉系统将它们放在哪里,要做什么重定位等等)。然后,操作系统也以某种方式将它们的 API 暴露给二进制文件(对于 Windows,一组系统 DLL)。
事实上,只要处理器架构相同,您可以仍然运行另一个系统上的二进制文件。您只需要一些软件,a.) 知道如何加载 windows 二进制文件和 b.) 将 win32 API 调用转换为目标平台的 API 调用。顺便说一句,这就是 wine 所做的。
我只是猜想您是从哪里了解到 C 是平台独立的。这是事实,但仅适用于 源代码。只使用标准 C 的 C 程序将在任何平台上编译(然后 运行),只要您有可用的 C 编译器即可。
没有"C executable"这样的东西。 C 编译器将 C 源代码翻译成特定的目标系统。可执行文件的格式将是 OS 指定的格式。因此,如果您为 Linux 使用 C 编译器,它将生成仅适用于 Linux.
的可执行文件
但是,如果代码是纯标准 C,您可以采用完全相同的源代码并在不同的编译器上为不同的平台编译它。也称为移植程序。
如果我在操作系统中创建一个 C 可执行文件(例如:Windows), 此文件 运行 可以在其他操作系统上使用吗(如:Linux、Mac-OS)。
试图给出一个完整的答案,这将是一个理论上的 "yes" 非常大 "but"。
首先要了解的是:由 C 编译器创建的二进制可执行文件与由编译器为其他语言创建的二进制可执行文件在任何方面没有区别。因此,以下内容与 C 无关。
这有两个问题。操作系统有不同的文件格式来存储二进制文件(通常由代码、数据等部分组成,还有一些元信息告诉系统将它们放在哪里,要做什么重定位等等)。然后,操作系统也以某种方式将它们的 API 暴露给二进制文件(对于 Windows,一组系统 DLL)。
事实上,只要处理器架构相同,您可以仍然运行另一个系统上的二进制文件。您只需要一些软件,a.) 知道如何加载 windows 二进制文件和 b.) 将 win32 API 调用转换为目标平台的 API 调用。顺便说一句,这就是 wine 所做的。
我只是猜想您是从哪里了解到 C 是平台独立的。这是事实,但仅适用于 源代码。只使用标准 C 的 C 程序将在任何平台上编译(然后 运行),只要您有可用的 C 编译器即可。
没有"C executable"这样的东西。 C 编译器将 C 源代码翻译成特定的目标系统。可执行文件的格式将是 OS 指定的格式。因此,如果您为 Linux 使用 C 编译器,它将生成仅适用于 Linux.
的可执行文件但是,如果代码是纯标准 C,您可以采用完全相同的源代码并在不同的编译器上为不同的平台编译它。也称为移植程序。