执行 64 位应用程序需要 Visual Studio Redistributable 包 x64?
Posted
技术标签:
【中文标题】执行 64 位应用程序需要 Visual Studio Redistributable 包 x64?【英文标题】:Visual studio Redistributable package x64 is needed to execute 64 bit application? 【发布时间】:2011-12-06 09:32:16 【问题描述】:假设一台机器(64 位)没有 Visual Studio 2008 和可再发行包 x64, 1. 要在该机器上运行 64 位应用程序(由 Visual Studio 2008 sp1 构建),我们是否需要在该机器上使用 Redistributable 包?
假设一台机器(64 位)安装了 Visual Studio 2008,但它没有可再发行包 x64, 2. 要在该机器上运行 64 位应用程序(由 Visual Studio 2008 sp1 构建),我们需要在该机器上使用 Redistributable 包吗?
可再发行包 x64 和 64 位应用程序之间有什么关系?
【问题讨论】:
【参考方案1】:首先,32 位和 64 位代码都存在此要求。使用 32 位代码和其他人在您之前安装它的可能性更大一些。就像 VS 安装程序在您的开发机器上一样。
它是由编译器设置引起的。项目 + 属性、C/C++、代码生成、运行时库设置。 VS 中的所有项目模板在 /MD 处都有此设置。您可以将其更改为 /MT 并且不再依赖于运行时 DLL,例如 msvcr90.dll。运行时库代码将链接到您的程序中,而不是依赖目标计算机上的 DLL。
但是,您必须小心,/MD 设置是安全设置。它确保您在创建自己的 DLL 并编写返回 C++ 对象(如 std::string)或必须由调用者释放的指针的代码时不会遇到麻烦。如果 DLL 和 EXE 都有自己的 CRT 副本链接到它们,这将无法正常工作。它们将使用不同的堆,跨堆释放指针无法正常工作。 XP 无声泄漏,Vista 及更高版本崩溃。
可再发行的 .exe 实际上是一个可下载的安装程序,当您忘记为您的程序编写安装程序时,您的客户可以使用它。更好的解决方案是让您编写一个安装程序来正确复制和安装所有内容。制作一个只需不到一分钟。将安装和部署 + 安装项目添加到您的解决方案。右键单击它,添加,项目输出。项目 + 属性,先决条件并勾选“Visual C++ 运行时库 (x64)”复选框。如果您喜欢创建自己的安装程序,则可以使用 C:\Program Files (x86)\Common Files\Merge Modules 中的合并模块
哦,部署 Release 版本,而不是 Debug 版本。 CRT 的调试版本不可分发。
【讨论】:
【参考方案2】:在许多情况下,您可以将您的程序静态链接到 C 运行时库。在这种情况下,不需要可再发行包,因为所有必要的功能都已复制到应用程序的可执行文件中。但是,如果您动态链接它,您应该将可再发行包与您的应用程序一起交付。虽然许多其他应用程序也这样做,但无法保证目标系统上可以使用必要的运行时。
您可以在项目设置对话框的“C/C++ > 代码生成 > 运行时库”下更改链接到运行时的方式。
以下 MSDN 文章解释了如何重新分发必要的 VC++ 文件:http://msdn.microsoft.com/en-us/library/ms235299%28v=vs.80%29.aspx
【讨论】:
以上是关于执行 64 位应用程序需要 Visual Studio Redistributable 包 x64?的主要内容,如果未能解决你的问题,请参考以下文章
Win 7 x64 + Visual Studio 2015为WinXP编译可执行程序
使用 Visual Studio Express 2013 进行 64 位编译
Visual Studio 2010 WebDev WebServer (Cassini) 64 位兼容吗?