恶心的VS2005
用VC2003一直很爽,到新公司要用2005,早听说其检查严格,没想到,完全是没事找事型的编译器.
且不说满屏幕的:
“警告 4 warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 “
运行个MFC的东西就报”由于应用程序的配置不正确,应用程序未能启动”
一查才知道,这是05的特权,缺少动态库也不说,直接报个配置不正确,Fuck.不如直接弹出个警告框”程序无法运行”适用性更大呢.
这里是重置2005配置的方法:
命令行输入:devenv /resetuserdata
[[
开始执行程序时出现错误提示: 没有找到MSVCP80D.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。
解决方法:
项目->属性->配置属性->清单工具->常规->使用FAT32解决办法 改为“是”即可
此时,应该将上次产生的debug文件夹删除才能正确运行。
]]
原因大致是由于2005编译时,FAT32格式硬盘会给程序加以时间戳,换机器运行时由于时间戳不符的原因导致无法运行,如果编译机器格式为NTFS格式则也不会出现该问题。
这两天有点焦头烂额, 我们这边运行的好好的程序, 到了测试的机器上就不能启动(是根本运行不了, 而不是运行出错), 弄得我异常郁闷。 经过了一番摸索, 发现和 winxp、win2003中为解决dll hell而引入的manifest机制有关系。而以前我们用vs2003开发, 它并没有强制程序使用manifest, 但到了vs2005中, 这已经改成必需的了, 而我们并没有按照需要进行相关的配置, 所以程序启动不了了。 根据目前的经验, vs2005编译的程序不能启动大致有两个原因, 下面简单介绍解决办法。 1、在开发组的机器上(安装有vs2005)有时都不能启动 这一般是项目的文件被放在了fat/fat32分区上导致的, 解决方法是把它们都移动到ntfs分区上, 或者把“项目属性|Manifest Tool|General|Use FAT32 Work-around”设为yes。 2、开发组运行正常, 换到其它机器上就不行了 这一般就是系统dll(包括crt,mfc,atl等)没有正确配置导致的。 如果程序是release版, 那么很简单, 只要把“\SDK\v2。0\BootStrapper\Packages\vcredist_x86”下的”vcredist_x86。exe”拷贝到目标机器上运行即可, 这是以x86平台为例的, 如果你用的是别的cpu平台(amd64或ia64)把x86替换成相应的内容就可以了。
注:[[ ]] 内信息转自http://hi.baidu.com/crafter%5Fxmu/blog/item/104040b44b4876768bd4b281.html
这里是”general error c101008a: Failed to save the updated manifest to the file “网上普遍的解决方法:
在用vs2005时,默认编码为unicode,如果在项目中途改变,则编译时会碰到错误general error c101008a: Failed to save the updated manifest to the file “.\Debug\Menu.exe.embed.manifest”. Bpcn mt.exe .这时清理解决方案,再重新生成项目便可解决.
这里是”warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 “网上普遍的解决方法:
一般来说,这个警告没有什么影响。要想去掉这个警告的方法有:
(1)转换Code文件为Unicode格式;
(2)在Project -> Properties -> Configuration Properties -> C/C++ -> Advance 的 Disable Specific Warnings 中添加相应的警告编号:4819;
(3)或找出不符合Unicode格式的文件,然后在该文件的开始处加入下面的语句:
# pragma warning (disable:4819)
2005断点无法命中的解决方案
1:重新编译该工程.
2:文件的编码格式不匹配造成的;修改步骤: 菜单->文件->XXX文件另存为->编码保存(保存按钮旁边的下拉菜单)->Unicode (UTF-8 带签名)->确定
这里是”由于应用程序的配置不正确,应用程序未能启动”网上普遍的解决方法:
方法一:在类似C:\Program Files\Microsoft Visual Studio 8\VC\redi st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件: msvcm80d.dll msvcp80d.dll msvcr80d.dll Microsoft.VC80.DebugCRT.manifest 把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以正确运行了。 其他release版、MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识!
结果: 把这几个Dll Copy过去,无效….
方法二:工程-》属性-》配置属性-》c/c++ -〉代码生成里,修改运行时库选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。
结果:由于我的程序使用了DLL输出,使用多线程调试是不行的,必须多线程调试DLL,这招也无效….
方法三: 工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc” 这样生成的exe文件应该就可以在其他机器上跑了。
结果: 告诉我缺少Boost库,编译一次Boost够我吃顿饭回来了- -
方法四: 你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装
结果: 搜索都没搜到该EXE,谁叫咱用的是盗版…
最终没有解决,下午再说.TMMD,2005.
解决了:
期间发生的问题包括:
1: Ogre的2005 Debug版本无法在其他机器上运行
错误描述为:”应用程序配置不正确……”
解决方法为:
需要开发者安装430MB左右的VS80sp1-KB926604-X86-CHS.exe库。
需要使用者安装2.59MB的VCRedist_x86.exe库。
2: Ogre的2005 Debug版本无法在其他机器上运行
错误描述为:” 应用程序正常初始化(0xc150002)失败”
解决方法为:
需要开发者安装430MB左右的VS80sp1-KB926604-X86-CHS.exe库。
需要使用者安装2.59MB的VCRedist_x86.exe库。
3:安装VCRedist_x86.exe库时报错
错误描述为:”Command Line option syntax error, Type Command /? For help”
解决方法为:
自己从VC2005目录下找到运行时目录,将其dll库拷贝出来,粘贴到应用程序目录下。
结论: 所以,想要运行2005编译后的Ogre引擎支持的相关Demo,尽量做到以下两点:
1:给予Release 版本
2:将VC运行时库的动态连接库一起拷贝过去。