我正在开发一个64位应用程序。是否可以在32位操作系统上运行64位应用程序?

12

我正在开发一个64位应用程序。能否在32位操作系统上运行64位应用程序?

请注意,这个问题是通用的,并不特定于Windows操作系统。事实上,这个应用程序本身可以在各种操作系统上移植。


1
从问题中可以看出您正在尝试使用相关应用程序。我建议您重新构思标题和问题的表述方式:“我正在开发一个Windows应用程序。我能否只提供64位二进制文件,并让它们在32位和64位的Windows系统上都能运行?” - Douglas Leeder
@Douglas,希望我的编辑没问题。 - Jay
1
暂时关闭并重新打开以防止迁移到SU。 - Bill the Lizard
9个回答

14

我们假设你谈论的是AMD64(== EM64T == x86_64)和x86分别用于64位和32位。

只有通过仿真(例如qemu)或某些类型的虚拟化,您才能在x86处理器上运行AMD64代码(我相信VMWare可能支持64位客户机操作系统在64位可用CPU上的32位主机操作系统上)。但是这意味着作为客户机在仿真或虚拟化中运行64位操作系统。

由于您正在开发应用程序,因此开发32位和64位版本的代码不应太困难。

对于Mac,您可以发布一个包含两种类型代码的单个二进制文件,或者Mac OSX可以在32位内核上运行您的64位二进制文件(仅在支持x86_64的处理器上)。对于Windows和Linux,您将必须发布单独的安装程序或者发布一些智能安装程序,在安装时选择正确的二进制文件。对于Linux,有一个项目添加了在AMD64处理器上的x86内核上运行AMD64代码的功能 - http://linuxpae64.sourceforge.net/ - 但它似乎没有很快地进入主线内核。

你为什么只想生成64位二进制文件?是否因为需要访问更多的内存,但32位操作系统也无法提供额外的内存。如果只是为了避免测试两个版本,请生成32位版本,它可以在Windows AMD64上运行,并且大多数Linux AMD64发行版也能够正常使用。


特别是在某些情况下,如果您在64位CPU上运行32位主机。 - Ignacio Vazquez-Abrams
在Mac上,您也可以只发布一个64位二进制文件,它将适用于32位和64位内核。 - Stephen Canon

7

在Windows上,只能使用虚拟机

在OS X上,64位应用程序可以本地运行(感谢Stephen)


谁在没有提供更正的情况下对所有这些答案进行了负面评价? - Otto Allmendinger
+1 - 有人在对所有答案进行负评,包括我的答案。我不知道为什么。如果我们错了,请提供正确的解决方案。 - LiamB
@Pino:我认为有人试图通过对所有其他答案进行投反对票来使他的答案最先显示。 - Otto Allmendinger
愚蠢的做法,这样做与本意背道而驰。应该要求注释。 - LiamB
这在Windows上是正确的,但并非所有操作系统都是如此。例如,OS X将在32位内核上运行64位二进制文件。 - Stephen Canon

5
另一种方式是可以的,但我认为你不能在32位操作系统上运行64位应用程序,你可以使用虚拟机或某种虚拟化技术来实现。

取决于操作系统。它不能在Windows上运行,但可以在OS X上运行。 - Stephen Canon

4
有一个比在32位操作系统上运行64位程序更简单的解决方案(包括通过32位操作系统上的模拟或虚拟64位平台执行):重新编译为32位操作系统
当你说它可以在不同的操作系统之间移植时,你是否也指非64位操作系统?如果是这样,我认为必须加上“仅限64位”才能称之为可移植,而且我认为许多(甚至大多数?)程序员也期望有这种说明,至少目前是这样。

3

使用软件仿真模式,可以通过qemu实现。


3

不行。

请参阅微软常见问题解答

32 位和 64 位是指计算机处理器(也称为 CPU)处理信息的方式。与 32 位系统相比,64 位版本的 Windows 更有效地处理大量随机访问内存 (RAM)。有关详细信息,请在线查看《Windows Vista 的 32 位版本和 64 位版本之间差异的说明》。

了解32位和64位之间的区别,你就会明白为什么这是不可能的。


仿真和虚拟机怎么样? - mouviciel
那不是“本地”的,我猜这就是OP所问的。 - Filip Ekberg
@mouviciel:那么64位程序将在模拟或虚拟的64位平台上运行,而不是在32位平台上运行。 - Roger Pate

2

如果你正在使用Windows系统,请查看这个链接

如果程序专门为64位Windows版本设计,那么它将无法在32位Windows版本上运行。(然而,大多数为32位Windows版本设计的程序可以在64位Windows版本上运行。)

为64位Windows版本设计的设备驱动程序将无法在运行32位Windows版本的计算机上工作。要了解如何检查驱动程序,请参阅更新不正常工作的硬件驱动程序或转到设备制造商的网站。


2
在Windows上不行,在OS X上可以。我不知道Linux的情况。
事实上,Snow Leopard启动时使用32位内核,但默认情况下编译应用程序为64位,因此在OS X上这是很常见的。

2

一个64位的应用程序无法在32位处理器上运行。

64位应用程序使用64位宽的寄存器,而32位处理器无法容纳这么宽的寄存器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接