buf

BE something YOU love and understand
posts - 94, comments - 35, trackbacks - 0, articles - 2
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理

OgreSDK1.7.2 VC8 VS2005 Sample 正常初始化失败

Posted on 2011-03-10 23:22 buf 阅读(763) 评论(0)  编辑 收藏 引用 所属分类: Graphics

下载的是已预编译了lib和dll的版本,编译的时候一切ok,除了需要在SampleBrowser的工程选项中调整一下CMake的径,但是执行的时候出现“正常初始化失败”的提示。将SampleBrowser设置为启动项目并调试,输出信息如下:

“SampleBrowser_d.exe”: 已加载“E:\Ogre\OgreSDK_vc8_v1-7-2\bin\debug\SampleBrowser_d.exe”,已加载符号。
“SampleBrowser_d.exe”: 已加载“C:\WINDOWS\system32\ntdll.dll”,未加载任何符号。
“SampleBrowser_d.exe”: 已加载“C:\WINDOWS\system32\kernel32.dll”,未加载任何符号。
“SampleBrowser_d.exe”: 已加载“C:\WINDOWS\system32\user32.dll”,未加载任何符号。
“SampleBrowser_d.exe”: 已加载“C:\WINDOWS\system32\gdi32.dll”,未加载任何符号。
“SampleBrowser_d.exe”: 已加载“C:\WINDOWS\system32\shell32.dll”,未加载任何符号。
“SampleBrowser_d.exe”: 已加载“C:\WINDOWS\system32\advapi32.dll”,未加载任何符号。
“SampleBrowser_d.exe”: 已加载“C:\WINDOWS\system32\rpcrt4.dll”,未加载任何符号。
“SampleBrowser_d.exe”: 已加载“C:\WINDOWS\system32\secur32.dll”,未加载任何符号。
“SampleBrowser_d.exe”: 已加载“C:\WINDOWS\system32\msvcrt.dll”,未加载任何符号。
“SampleBrowser_d.exe”: 已加载“C:\WINDOWS\system32\shlwapi.dll”,未加载任何符号。
“SampleBrowser_d.exe”: 已加载“E:\Ogre\OgreSDK_vc8_v1-7-2\bin\debug\OgreMain_d.dll”,未加载任何符号。
LDR: LdrpWalkImportDescriptor() failed to probe e:\Ogre\OgreSDK_vc8_v1-7-2\bin\Debug\OgreMain_d.dll for its manifest, ntstatus 0xc0150002
调试器:: 在进程加载过程中引发了未处理的无法继续的异常
程序“[4056] SampleBrowser_d.exe: 本机”已退出,返回值为 -1072365566 (0xc0150002)。

 

看起来和manifest有关。用二进制编辑器打开OgreMain_d.dll,搜索"manifest"字符串发现需要的运行时库为"Microsoft.VC80.DebugCRT" version="8.0.50727.4053" 。而我在本机C:\windows\winsxs下找到的版本为:

x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c
x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f

我的VS版本为VS 2005 TS SP1 (8.0.50727.762),和winsxs下dll的版本号倒是一致的,看起来可能是需要打更新的补丁了。

 

google一番后果真如此:正是7/28/2009发布的Visual Studio 2005 Service Pack 1 ATL Security Update增加了.4053版本的runtime。乖乖,补丁还不小,249.1MB,差点就250了。不知这个补丁装起来会不会如同VS2005的SP1那样恐怖。。。

关于此更新的详细信息见MS KB971090。另外这里http://stackoverflow.com/questions/1582844/vcredist-x86-dll-and-version-8-0-50727-4053谈到了新旧版本runtime的兼容问题,答案是安装该补丁不会影响原来依赖8.0.50727.762版本dll的程序的运行,因为"If the application loads the library from WinSxS, you don’t need to worry about such issue. When the KB971090 applied, there is a redirection policy installed in WinSxS, which will redirect any lower version of VC80 CRT to the highest one (4053). "

问题是,装了这个更新再发布程序,就得把相应的redist也带上了。。。切记切记。

应该就是这样了,不过还没有把安全升级down下来测试。网上有的朋友说是因为没有安装VS8的SP1,也许是把SP1和这个安全更新弄混了吧。

 

后继:

1、这个针对VS8SP1的安全更新装起来不算慢。。。可以忍受

2、在安装了DX最新的enduser runtime(June2010)后,Ogre的sample总算可以跑起来了,效果还不错:-)

只有注册用户登录后才能发表评论。