如何使用Visual Studio Express 2005创建完全静态链接的.exe? 我目前首选的C++环境是免费的,并且非常出色的微软Visual Studio 2005 Express版。我不时向其他人发送release.exe文件,结果令人满意。然而,最近我发现令人不安的是,令人高兴的结果是基于我想要的更多运气。试图在一个旧的(2001年过时的,没有严格更新的)XP机器上运行其中一个程序时,我只收到了一条令人讨厌的“System cannot run x.exe”(或类似的)消息

如何使用Visual Studio Express 2005创建完全静态链接的.exe? 我目前首选的C++环境是免费的,并且非常出色的微软Visual Studio 2005 Express版。我不时向其他人发送release.exe文件,结果令人满意。然而,最近我发现令人不安的是,令人高兴的结果是基于我想要的更多运气。试图在一个旧的(2001年过时的,没有严格更新的)XP机器上运行其中一个程序时,我只收到了一条令人讨厌的“System cannot run x.exe”(或类似的)消息,c++,visual-studio,linker,C++,Visual Studio,Linker,一些谷歌搜索显示,使用此工具集,即使指定静态链接,也会产生一个简单的hello-world.exe,实际上它依赖于额外的.dll文件(msvcm80.dll等)。一个极其复杂的版本规划系统(manifest files any?)在没有正确的.dll版本的情况下不会让.exe运行。我不想要也不需要这些东西,我只想要一个老式的自给自足的.exe,它只做最低公分母的Win32操作,在任何旧的Win32操作系统上运行 有人知道我想用现有的工具集做什么是可能的吗 谢谢。对于C运行时,请转到项目设置,选择

一些谷歌搜索显示,使用此工具集,即使指定静态链接,也会产生一个简单的hello-world.exe,实际上它依赖于额外的.dll文件(msvcm80.dll等)。一个极其复杂的版本规划系统(manifest files any?)在没有正确的.dll版本的情况下不会让.exe运行。我不想要也不需要这些东西,我只想要一个老式的自给自足的.exe,它只做最低公分母的Win32操作,在任何旧的Win32操作系统上运行

有人知道我想用现有的工具集做什么是可能的吗


谢谢。

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


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

我也遇到过同样的依赖性问题,我也知道您可以将VS 8.0 DLL(仅限发行版!非调试版!--并且您的程序也必须发行)包含在一个具有适当名称的文件夹中,在包含.exe的父文件夹中:

还注意到,如果您需要在同一静态链接.exe中拥有C++和C代码,则会保证出错,因为您将获得链接冲突,这些冲突只能通过忽略正确的LIbxx.LIB然后动态链接(DLL)来解决。


最后,使用不同的工具集(VC++6.0)可以“正常工作”,因为Windows 2000和更高版本安装了正确的DLL。

关于Jared的回答,使用Windows 2000或更高版本不一定能解决当前的问题。Rob的回答确实有效,但此修复可能会带来安全问题,因为Windows更新无法修补按此方式构建的应用程序


在另一篇文章中,Nick Guerrera建议将VisualC++运行时重新分配到应用程序,它安装得很快,并且独立于VisualStudio.< /P> < P>我在Visual Studio 2010中的经验是需要两个更改,以不需要DLL。从项目属性页(在解决方案资源管理器窗口中右键单击项目名称):

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

  • 在配置属性-->C/C++-->代码生成下,将“运行时库”字段更改为“多线程(/MT)”

  • 不知道为什么两者都需要。我用它来删除对glut32.dll的依赖


    稍后添加:在对配置进行这些更改时,应将其设置为“所有配置”-您可以在“属性”窗口顶部选择此选项。如果仅对调试配置进行更改,它将不会应用于版本配置,反之亦然。

    “如果您使用任何其他库,您可能需要告诉链接器显式忽略动态链接的CRT。”最近我遇到了这个问题。我正在构建一个wxWidgets应用程序,我发现我需要用相同的代码生成修改来重建wxWidgets库。300个字符并不多。如果上述评论不清楚,问题是您的.cpp文件和任何库.cpp文件都需要具有“多线程”而不是“多线程dll”,否则您可能会遇到链接错误。这会导致与堆管理相关的许多问题,您可能不想对此做任何处理。我得到
    错误LNK2038:检测到“RuntimeLibrary”的不匹配:值“MD\u DynamicRelease”与值“MT\u StaticRelease”不匹配。
    。是否有其他地方可以更改构建的类型?我正在构建wxWigets应用程序,很像@BillForster。那么我必须重建wxWidgets吗?我该怎么做?@EdwardStrangle什么问题?虽然打包可再发行软件似乎是首选解决方案,但您需要管理员权限才能运行可再发行软件安装程序。如果您有任何非管理员用户,则这不是一个可行的选项。这似乎在Visual Studio 2013中起作用,只需添加一个小功能:我必须将配置属性->常规->字符集更改为“使用Unicode字符集”。