选择哪个 VC++ 可再发行包(x86 或 x64)?
Posted
技术标签:
【中文标题】选择哪个 VC++ 可再发行包(x86 或 x64)?【英文标题】:Which VC++ redistributable package to choose (x86 or x64)? 【发布时间】:2012-01-30 16:51:42 【问题描述】:软件包类型(x86 或 x64)是否取决于我的应用程序类型或安装它的操作系统类型?
也就是说,如果我开发一个 32 位应用程序,我需要这样做
仅部署 x86 包或 部署这两个软件包并在 32 位 Windows 上安装 x86 并在 64 位 Windows 上安装 x64?32-bit VC++ redistributable on 64 bit OS? 这个问题的答案表明它只是 x86 包,所以它取决于我的应用程序,但它没有给出任何解释/链接。 MS 下载站点也没有具体说明这一点。
【问题讨论】:
安装可再发行软件包不是为了支持您的操作系统,而是为了支持您的应用程序。 ... 并且必须选择匹配您的编译器。 @Ben:当然,对于 Visual Studio 2008,我将部署 2008 可再发行组件 AndréCaron:你有源吗? @MatthiasBäßler:一切都应该与编译器匹配:版本、服务包级别、位数。原因是32位进程无法加载64位DLL,而64位redist只包含64位DLL。 @BenVoigt:听起来很合理。你能把这个写成答案让我接受吗? 【参考方案1】:编译时,标准库的所有使用都会创建必须在链接时解析的引用。链接器在导入库中为匹配的运行时 DLL 烘焙,必须在加载时完全匹配。这意味着匹配编译器版本、服务包和位数。
还请记住,32 位进程无法加载 64 位 DLL。因为 64 位的 redist 只包含 64 位的 DLL,所以在加载 32 位的可执行文件时没有任何帮助。
【讨论】:
【参考方案2】:如果您需要最大限度地发挥 64 位操作系统的潜力,则取决于应用程序,您可以同时部署 64 位和 32 位处理。但是,如果您的应用程序没有超过 32 位的限制,您可以仅将应用程序部署在 x86 上,无论如何它也应该可以通过 32 位虚拟化在 64 位操作系统上运行。
【讨论】:
我认为这是错误的:为了最大限度地发挥 64 位操作系统的潜力,我需要将其编译为 64 位应用程序。问题是:如果我决定编译一个 32 位应用程序,我是否需要在 64 位操作系统上使用 x64 可再发行组件? 并非如此。您可以使用 32 位可再发行组件,因为目标应用程序部署是 32 位的,您只需要为 32 位处理器设计的机器指令。以上是关于选择哪个 VC++ 可再发行包(x86 或 x64)?的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft VC++ 2005 SP1 和 2008 SP1 可再发行包