“在没有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”回答的朋友解释一下我的困惑,也许真的是我理解有偏差,如果没有偏差,为什么这个答案会如此流行呢?
“___ 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”回答的朋友解释一下我的困惑,也许真的是我理解有偏差,如果没有偏差,为什么这个答案会如此流行呢?
就是软件发布的问题了。Release优化等各个方面都利于发布。至于缺少的依赖。都要一一添加进发布的包。对于正式发布的版本是必需的,毋庸置疑。至于你个人的简单AP随便你,只要能跑起来就可以了,呵呵
以上仅仅针对VC6.0。
链接库问题吧…………
说什么没装VC不能运行。。只要把文件复制全了在哪里都可以运行。
以VS2008为例,只要把下面文件夹的内容都放到程序目录下就行了。Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.MFC
我的理解和你差不多。
刨根问底精神,值得学习,呵呵
编译选项:/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
你用VS开发的软件,要对外发行给终端用户使用,必然要找出最小依赖的相关库文件,你可以通过 VS 安装目录下的 DEPENDS.EXE 去查看你开发出来的软件需要哪些库文件的支持,你打包的时候,只要将VS安装目录中的少数几个DLL和你的软件一起打包发布就可以了。有些是需要注册的,你也可以在安装包中将注册功能一起打上就行了。