【问题标题】:Are games/programs compiled for multiple architectures?是否为多种架构编译了游戏/程序?
【发布时间】:2013-11-23 22:21:41
【问题描述】:

这可能是一个很大的宽泛和有点愚蠢,但这是我从来没有理解过的。

除了 Java 之外,我从来没有处理过需要编译的代码,我猜它介于两把椅子之间,所以就这样吧。

我不明白游戏和程序是如何编译的。它们是为多种架构编译的吗?或者它们是在安装过程中编译的(看起来不是那样的)?

据我了解,代码需要根据本地架构进行编译才能使其工作。这意味着您不能为 AMD 编译某些东西并“复制”二进制文件并在运行 Intel(或类似设备)的计算机上执行它们。

我在这里有什么误解,或者他们使用的方法与我提供的示例不同?

【问题讨论】:

    标签: compilation computer-architecture


    【解决方案1】:

    AMD 和英特尔是制造商。您可能会想到 amd64(也称为 x86_64)与 x86。顾名思义,x86_64 是基于 x86 的。

    运行 64 位 x86_64 操作系统的计算机可以正常运行 x86 应用程序,但反之则不然。因此,一种可能性是发布 32 位 x86 游戏,但这会限制每个进程可以访问的 RAM 量。不过,这对于游戏来说可能没问题。


    更大的问题是针对不同平台的发货,例如 Playstation 和 (Windows) PC。 Playstation 不仅拥有完全不同的 CPU 架构 (Cell),而且拥有不同的操作系统。

    在这种情况下,您不能简单地交叉编译——这是因为操作系统不同。您必须拥有两个独立的游戏版本——共享一堆通用代码和媒体文件(也称为资产)——一个用于 PC 版本,一个用于 Playstation。

    理论上,您可以使用 Java 来克服这个问题……但这仅在 JVM 可用于所有目标平台时才有效。此外,Java 市场现在存在碎片化,例如Android 支持与 JME 不同的 API。 iPhone 和 iPad 根本不支持 Java。

    许多游戏发行商实际上并不使用 Java。 Mojang 是个例外。

    【讨论】:

    • 在这种情况下,您实际上通常会进行交叉编译。这意味着您在另一个平台上为一个平台(架构/操作系统组合)编译二进制文件。 IE。您在 (X86) 上为 Android (ARM) 编译二进制文件。而且我会假设 playstation 的二进制文件也在 X86 平台上编译。
    • 是的,抱歉,我的意思是你不能简单地为另一个平台交叉编译你现有的应用程序。
    • 感谢您解决此问题。这很有意义,我现在看到我误解了编译源代码的工作原理。谢谢!
    猜你喜欢
    • 2013-06-16
    • 2011-01-28
    • 1970-01-01
    • 2011-07-24
    • 2011-08-31
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多