选择哪个VC++可再发行软件包(x86或x64)?

11
软件包类型(x86或x64)是依赖于我的应用程序类型还是安装的操作系统类型呢?
也就是说,如果我开发了一个32位应用程序,我需要:
- 只部署x86软件包,还是 - 部署两个软件包,并在32位Windows上安装x86,在64位Windows上安装x64?
回答这个问题的答案表明只需要x86软件包,因此这将取决于我的应用程序类型,但它没有给出任何说明/链接。MS下载站点也没有具体说明这一点。

4
可再分发的软件包并非安装以支持您的操作系统,而是安装以支持您的应用程序。 - André Caron
...并且必须选择与您的编译器相匹配的版本。 - Ben Voigt
@Ben:当然,对于Visual Studio 2008,我会部署2008年的可再发行组件。 AndréCaron:你有相关来源吗? - Matthias Bäßler
@MatthiasBäßler:一切都应与编译器匹配:版本、服务包级别、位数。原因是32位进程无法加载64位DLL,而64位redist仅包含64位DLL。 - Ben Voigt
@BenVoigt:听起来很合理。你能写成答案让我采纳吗? - Matthias Bäßler
2个回答

7
当您编译代码时,标准库的使用会创建引用,这些引用必须在链接时解析。链接器会将匹配运行时DLL的导入库嵌入在可执行文件中,但必须完全匹配,包括编译器版本、服务包和位数。
此外,需要注意的是32位进程无法加载64位DLL。因为64位redist只包含64位DLL,所以在加载32位可执行文件时是无法帮助的。

-1

这取决于应用程序,如果你需要最大化64位操作系统的潜能,你可能需要同时部署64位和32位处理。然而,如果你的应用程序没有超出32位的限制,你可以只在x86上部署应用程序,无论如何它也应该通过32位虚拟化在64位操作系统上运行。


2
我认为这是错误的:为了最大化在64位操作系统上的潜力,我需要将其编译为64位应用程序。 问题是:如果我决定编译32位应用程序,在64位操作系统上是否需要x64可再发行组件? - Matthias Bäßler
不是真的。由于目标应用程序部署为32位,因此您可以使用32位可再发行组件,您只需要针对32位处理器设计的机器指令即可。 - mdprotacio

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