如何使用 VisualStudioExpress2005创建完全静态链接的.exe?

我目前最喜欢的 C + + 环境是免费且非常优秀的 MicrosoftVisualStudio2005Express 版本。我时不时地发出释放令。以令人满意的结果将 exe 文件发送给其他人。然而最近我发现了一个令人不安的现象,那就是令人愉快的结果是基于我所喜欢的更多的运气。试图在一个旧的(2001年的,没有经过仔细更新的) XP 机器上运行这些程序,除了一个讨厌的“ System can not run x.exe”(或类似的)消息,我什么也没有得到。

一些谷歌搜索发现,使用这个工具集,甚至在一个简单的 hello-world.exe 中指定静态链接结果实际上都依赖于额外的东西。Dll 文件(msvcm80.dll 等)。一个极其复杂的版本设计系统(清单文件,有人知道吗?)那就不要让。没有完全正确地运行。Dll 版本。我不想要也不需要这些东西,我只想要一个老式的自给自足的。除了运行 win32操作最小公分母,exe 什么都不做,只能在任何旧的 win32操作系统上运行。

有人知道是否可以用我现有的工具集做我想做的事情吗?

谢谢你。

156547 次浏览

对于 C 运行时,进入项目设置,选择 C/C + + ,然后选择“代码生成”。将“运行时库”设置更改为“多线程”而不是“多线程 dll”。

如果您正在使用任何其他库,您可能需要告诉链接器显式地忽略动态链接的 CRT。

我也遇到过同样的依赖性问题,我还知道您可以包含 VS 8.0 DLL (仅发布!)!不是调试!--并且您的程序也必须发布)在一个适当的名称的文件夹中,在父文件夹中与您的。例如:

如何: 使用 XCopy (MSDN)部署

还要注意,如果您需要将 C + + 和 C 代码放在同一个静态链接中,那么事情肯定会出错。因为只有忽略正确的 libXXX.lib,然后动态链接(DLL) ,才能解决链接器冲突。

最后,使用不同的工具集(VC + + 6.0) ,事情“只是工作”,因为 Windows 2000及以上有正确的 DLL 安装。

至于 Jared 的回答,拥有 Windows2000或更好的系统并不一定能解决眼前的问题。Rob 的回应确实有效,但是这个修复可能会引入安全问题,因为 Windows 更新将不能修补这样构建的应用程序。

在另一篇文章中,Nick Guerrera 建议将 Visual C + + Runtime Redistribution 打包到您的应用程序中,这样可以快速安装,并且独立于 Visual Studio。

我在 VisualStudio2010中的经验是,需要进行两项更改,以便不需要 DLL。从项目属性页(右键单击解决方案资源管理器窗口中的项目名称) :

  1. 在“配置属性—— > 常规”下,将“使用 MFC”字段更改为“在静态库中使用 MFC”。

  2. 在 Configuration Properties —— > C/C + + —— > Code Generation 下,将“ Runtime Library”字段更改为“ Multi-Threaded (/MT)”

我不确定为什么需要这两者,我使用这个来消除对 glu32.dll 的依赖。

后来添加: 当对配置进行这些更改时,您应该将它们更改为“ All Configuration”——-您可以在“属性”窗口的顶部选择此项。如果只对 Debug 配置进行更改,则不会应用于发布配置,反之亦然。