64位系统上的32位库

时间:2011-06-20 16:51:42

标签: c++ visual-studio-2010

如果我在64位系统上使用32位库会导致任何问题吗?

可能是什么不相容?

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

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

问题是,如果程序中有任何东西,我们应该在使用那些与系统不匹配的库时进行调查。 (64位操作系统上的32位库)

5 个答案:

答案 0 :(得分:4)

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

在64位Windows上运行32位应用时,您必须注意 某些gotchas。例如,有registry redirection(为了避免它将KEY_WOW64_64KEY传递给例如RegOpenKeyEx)。还有文件系统重定向。例如,在读取系统配置值时,这些是重要的事情。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您可能对this link解释在移植到64位时常见的编译器错误感兴趣。它可以帮助您解决问题。

为了尝试更直接地回答您的问题,有些事情可能会使64位库在64位环境中中断,但是在SO答案中分享的信息太多了。

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

答案 3 :(得分:1)

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

你可能会问的问题是关于将32位库链接到64位程序

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

答案 4 :(得分:0)

您的问题可能是如何开发专门针对64位与32位硬件本机运行的代码。有here的信息。特别是您必须按照here的说明启用64位构建工具。

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