症状:
VS2010,使用OSG2.9.6库的程序,Debug配置运行时,会提示找不到读ive文件的插件;
Release下正常。
说明:
1.依赖项中的lib库已经检查过是d和非d区分的。
2.编译通过,include和lib目录正确。
3.windows 2003 x64 r2 with sp2
4.VS2010,使用win32配置。
5.osgversion 2.9.6
代码如下:
1 osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
2 viewer->setSceneData(osgDB::readNodeFile("test.ive"));
3 viewer->run();
2 viewer->setSceneData(osgDB::readNodeFile("test.ive"));
3 viewer->run();
2010/10/21 update1
使用$err,hr 获取到 osgDB / DynamicLibrary.cpp中 handle = LoadLibrary( libraryName.c_str() )的错误信息:
0x000036b1 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题
libraryName的值确认是存在的osgdb_ived.dll。
2010/10/21 update2
用depends分析了osgdb_ived.dll和osgdb_ive.dll,发现前者依赖的zlib1d.dll木有找到MSVCR80D.DLL和MSJAVA.DLL,后者木有 找到MSJAVA.DLL。
解决方法:
使用和OSG的编译环境一样的环境(VS2010)编译生成新的zlib替换原来的zlib文件。(原先的zlib是vs2005sp装到顶的编译环境编译的,也就是c++版本是8.0.50727.4053)。
附:
听说是因为VS不能使用混合版本debug才会这样。
甚为疑惑,如果这是真的话,就意味着如果程序LoadLibrary加载了使用其他版本的VC编译的dll库,就只能一直使用Release,不能调程序了?不能这么残忍吧!
改天从装了vs2005的机器上拷贝727.4053版的msvcr80d.dll来验证一下。