“在没有VC的机器上无法运行程序,如何解决?”这个问题一直以来就是个长盛不衰的问题,经常有人问。而更为长盛不衰的回答是“用release编译” “你给人家debug版还想运行?” 很多不明真相的人也是疯狂跟帖: “___ release ...” “___ release ...” “___ release ...”我一直就想不明白,这个问题和release版本有啥关系?为什么都要联系到release上去?release版本只是做一些优化,而且不会把调试信息编译进去,但我没有听说过release版会自动使用静态库。动态使用MFC库的情况下,即使选了release编译,也同样是不能运行的,因为缺少MFC库。动态使用MFC的情况下release和debug的区别是缺少MFC__.dll还是缺少MFC__D.dll,总之是不能运行。反过来,debug版本选择了静态使用MFC库,也可以在没有VC的机器上运行。能否在没有VC的机器上运行,主要取决依赖的库是否存在,静态编译进去了也算是存在,而与release还是debug无关。用exescope或dependency之类的工具,可以很容易解决这个问题。另外的一个问题是“VC2008编译的win32程序在其他机器运行不了,VC6都可以,2008太垃圾了”。然后又是很多人疯狂的喊
“___ release ...”“___ release ...”“___ release ...”
都没有研究过就这样回帖,严重误导别人。
其实win32的程序涉及运行时库(runtime library)的问题。VC6下默认静态使用运行时库,而VC2008默认是动态使用运行时库。VC2008下面,如果不改选项,在其他没有VC的机器上会缺少msvcr90.dll。MFC程序没有这个问题,因为当选择“静态使用MFC库”的时候,IDE自动设置了静态使用运行时库。win32程序要解决这个问题,只要在工程设置里,把"配置属性--C/C++--代码生成--运行库"改成多线程(/MT)就行了,而跟(release/debug)无关。我印象中,这个问题用"release"来回答有好多年了,而且有此观点的人还不少,很是疑惑不解。记得当初我初学MFC的时候也遇到过这个问题,当时也参照了"release"的解决方法,未能奏效,最后通过“静态使用MFC库”解决了。我也想过也许是我的理解有所偏差:
1.大家说的"release"并不是指vc的release编译模式
2.或者是release本身就有静态使用库的意思
3."release"指发行版的意思,是英文单词,并非是使用VC的release编译,release就代表了必须打包所有依赖的库以上问题给了我不小的困扰,请发帖用“release”回答的朋友解释一下我的困惑,也许真的是我理解有偏差,如果没有偏差,为什么这个答案会如此流行呢?

解决方案 »

  1.   

    debug版本是给开发人员用的,你的product里面会保留一些用于debug的信息,而且几乎不会进行优化,那么按照VS的时候,会在你本机install一些用于debug的组件,比如一些com,一些dll。但是在没有装过的vc的机器上,就没有这些,你不得不使用release版本的。
      

  2.   

    使用动态库还是静态库并不是由release或debug决定,也是在在工程里的编译选项决定。
      

  3.   

    release模式是发布版本,发布的时候就应该使用这个版本,只与不能运行的原因很多,比如目标机器没有VC的类库,运行时库以及程序本身依赖的一些别的组件等...
      

  4.   

    release和debug编译参数的两种组合,实际上还可以建其他的编译配置。这样做的目的应该是比较方便的切换编译方式。
      

  5.   

    其实区别就是传递给 cl.exe的参数不同
      

  6.   


    就是软件发布的问题了。Release优化等各个方面都利于发布。至于缺少的依赖。都要一一添加进发布的包。对于正式发布的版本是必需的,毋庸置疑。至于你个人的简单AP随便你,只要能跑起来就可以了,呵呵
      

  7.   

    在没有VC环境的机器上不能运行程序,只需要从将安装VC的系统中的system32文件夹里面将MFC42D.DLL、MFCO42D.DLL和MSVCRTD.DLL拷贝出来,和可执行文件放在一起,或者干脆也放到目标机器的system32文件夹里面,就可以了。
    以上仅仅针对VC6.0。
      

  8.   

    ………………
    链接库问题吧…………
    说什么没装VC不能运行。。只要把文件复制全了在哪里都可以运行。
    以VS2008为例,只要把下面文件夹的内容都放到程序目录下就行了。Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.MFC
      

  9.   

    能否运行,不在release与debug。但是,大部分的系统本身就提供发布版动态库,而没有调试版动态库,需要另外拷入。
    我的理解和你差不多。
    刨根问底精神,值得学习,呵呵
      

  10.   

    我主要奇怪的是为什么那么多答案都是回答“release”,release就真的解决这个问题了?
      

  11.   

    默认的Debug和Release的选项过滤掉相同设置,主要的不同如下: 
    编译选项:/Od /D "_DEBUG" /Gm /RTC1 /MDd /Fo"Debug““" /ZI 
    链接选项:/OUT:"D:“MyProject“logging“Debug“OptionTest.dll" /INCREMENTAL Release设置: 
    编译选项:/O2 /GL /D "NDEBUG" /FD /MD /Fo"Release““" /Zi 
    链 接选项:/OUT:"D:“MyProject“logging“Release“OptionTest.dll" /INCREMENTAL:NO 
      

  12.   

    Release发布的软件也是需要相关运行环境支持的。
    你用VS开发的软件,要对外发行给终端用户使用,必然要找出最小依赖的相关库文件,你可以通过 VS 安装目录下的 DEPENDS.EXE 去查看你开发出来的软件需要哪些库文件的支持,你打包的时候,只要将VS安装目录中的少数几个DLL和你的软件一起打包发布就可以了。有些是需要注册的,你也可以在安装包中将注册功能一起打上就行了。
      

  13.   

    楼主你说错了 vc6默认也是动态使用共享运行库的 只不过vc6的运行库现在的主流系统上都自带