64位系统上的32位库

32-bit library on 64-bit system

本文关键字:32位库 系统 64位      更新时间:2023-10-16

如果我在64位系统上使用32位库,会不会造成任何问题?

什么是不兼容的?

我知道这个问题太含糊了。一个例子:

我尝试在Windows 7 64位上使用VS2010设置FreeGlut 32位库。一开始有很多问题。所以,我在寻找64位的FreeGLUT,认为32位的FreeGLUT可能与64位的Windows冲突。但后来我成功地在64位Windows上运行了32位FreeGlut,没有任何问题。

问题是,如果程序中有什么东西,我们在使用那些与系统不匹配的库时应该研究一下?(64位操作系统上的32位库)

64位Windows完全能够运行32位应用程序。事实上,Visual C++的默认配置是构建一个x86应用程序,而不管它在哪个操作系统上运行

在64位Windows上运行32位应用程序时,您必须注意一些问题。例如,有注册表重定向(为了避免它,您将KEY_WOW64_64KEY传递给例如RegOpenKeyEx)。还有文件系统重定向。例如,当您读取系统配置值时,这些都是需要记住的重要事项。

此外,请注意,您不能在同一过程中混合32位和64位。您的32位应用程序无法使用64位DLL或静态库。

Visual studio可以根据项目设置编译32位或64位。

也许,你想问的问题是关于将32位库链接到64位程序

答案是:
您不能直接链接到64位程序中的32位代码
唯一的选择是编译一个可以在64位平台上运行的32位(独立)程序(使用ia32),然后使用进程间通信从64位程序与之通信。

这与操作系统无关-Windows不在乎您的代码是32位还是64位。重要的是,您的进程与它要加载的所有库具有相同的比特性,并且它们必须都是相同的比特。

您可能对解释移植到64位时常见编译器错误的链接感兴趣。它可能会帮助你解决问题。

为了更直接地回答您的问题,有一些事情可能会使32位库在64位环境中崩溃,但在SO回答中共享的信息太多了。

此链接是与64位系统开发相关的MSDN索引,您可能也会感兴趣。

您的问题可能是如何开发在64位和32位硬件上本机运行的特定代码。这里有相关信息。特别是,您必须按照此处的说明来启用64位构建工具。

如果您正在构建64位二进制文件,则需要链接到64位库。请注意,32位二进制文件在64位Windows上应该可以正常运行,因此您可能不需要遇到此问题。