32位库在64位系统上

3

如果我在64位系统上使用32位库,会有什么问题吗?

可能存在的不兼容性是什么?

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

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

问题是,在使用那些与系统不匹配的库(32位库在64位操作系统上)时,我们应该注意什么程序中的东西呢?


1
你可以在VS中编译32位或64位,这是一个项目设置。Visual Studio本身只有32位,但这并不重要。 - driis
1
请在下投票之前询问以澄清。英语不是每个人的母语,所以人们难以表达自己的意思非常正常。:( - Quazi Irfan
他在询问在64位系统上使用为32位系统构建的库时是否需要采取任何预防措施。 - BlackBear
5个回答

4

64位Windows完全能够运行32位应用程序。事实上,Visual C++的默认配置是构建x86应用程序,无论它运行在什么操作系统上。

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

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


1
那么,这也意味着,只有当我在64位应用程序上开发时,才需要FreeGLUT 64位。对吗? - Quazi Irfan
对于那些像我一样好奇的人:@Pedrod'Aquino的答案也适用于另一种情况:64位应用程序与32位dll文件没有向后兼容性。 - Mr.H

2

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

可能您想问的问题是如何将32位库链接到64位程序中。

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


2

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


1

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

为了更直接地回答你的问题,有些因素可能会导致32位库在64位环境中出现问题,但这是太多信息要在SO答案中分享了。

这个链接是与开发64位系统相关的MSDN索引,也可能会引起你的兴趣。


我需要注意哪些常见问题?我猜这取决于库的工作方式。感谢您的回答。因此,当我在Windows 64上使用FreeGLUT 32时,为了避免任何意外错误,我应该尝试在Windows 64上使用FreeGlut 64。对吗? - Quazi Irfan

0

你的问题可能是关于如何开发能够在64位和32位硬件上本地运行的代码。这里有相关信息here。特别是,你需要按照here的说明启用64位构建工具。

如果你正在构建64位二进制文件,你将需要链接64位库。请注意,32位二进制文件应该可以在64位Windows上正常运行,所以你可能不需要费这个劲。


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