如何使用Visual Studio Express 2005制作完全静态链接的.exe?
我当前首选的C ++环境是免费且功能强大的Microsoft Visual Studio 2005 Express版本。我不时地将发布的.exe文件发送给其他人,并获得了令人满意的结果。但是最近我令人不安的发现是,令人愉快的结果是基于我想要的更多运气。试图在一个旧的(2001年份,未仔细更新)XP机上运行这些程序之一,但给我什么却只有一个讨厌的"系统无法运行x.exe"(或者类似)消息。
一些谷歌搜索发现,使用此工具集,甚至指定静态链接也会导致一个简单的hello-world.exe实际上依赖于额外的.dll文件(msvcm80.dll等)。一个精心设计的版本计划系统(是否显示任何文件?)然后会在没有完全正确的.dll版本的情况下让.exe运行。我不需要或者不需要这些东西,我只想要一个老式的自包含.exe,它只执行最低公分母Win32操作,并且可以在任何旧的win32 OS上运行。
有谁知道我现有的工具集是否有可能做我想做的事情?
谢谢你。
解决方案
回答
对于C运行时,请转到项目设置,选择C / C ++,然后选择"代码生成"。将"运行时库"设置更改为"多线程",而不是"多线程dll"。
如果使用任何其他库,则可能需要告诉链接程序显式忽略动态链接的CRT。
回答
我也遇到过同样的依赖问题,我也知道我们可以在相应名称的文件夹中包含VS 8.0 DLL(仅发布!不能调试!---并且程序也必须发布)。 .exe的父文件夹:
如何:使用XCopy(MSDN)进行部署
另请注意,如果我们需要在同一静态链接的.exe中包含C ++和C代码,则一定可以保证事情不会发生,因为我们将获得链接器冲突,而这些冲突只能通过忽略正确的libXXX.lib然后进行动态链接(DLL)来解决。 。
最后,由于Windows 2000及更高版本已安装了正确的DLL,因此使用其他工具集(VC ++ 6.0)可以"正常工作"。