查看: 3829|回复: 11

could not find plugin to read objects from file xxx.ive[已解决]

[复制链接]

该用户从未签到

发表于 2010-11-19 09:04:17 | 显示全部楼层 |阅读模式
本帖最后由 CR苏杭 于 2010-11-21 18:27 编辑

症状
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();
复制代码
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来验证一下。

该用户从未签到

发表于 2010-11-19 10:30:34 | 显示全部楼层
是否编译了osgdb_ived库?

该用户从未签到

发表于 2010-11-19 11:53:23 | 显示全部楼层
我也遇到相同的问题,release 版本没问题,运行debug版本,设置notify_level 为debug,得到信息如下:
C:\OpenSceneGraph-2.8.2\OpenSceneGraph\build\bin>osgviewerd.exe XXX.ive

GraphicsContext::setWindowingSystemInterface()
......
itr='C:\OpenSceneGraph-2.8.2\OpenSceneGraph\build\bin'
FindFileInPath() : trying C:\OpenSceneGraph-2.8.2\OpenSceneGraph\build\bin\osgpl
ugins-2.8.2\osgdb_ived.dll ...
FindFileInPath() : USING C:\OpenSceneGraph-2.8.2\OpenSceneGraph\build\bin\osgplu
gins-2.8.2\osgdb_ived.dll
DynamicLibrary::failed loading "osgPlugins-2.8.2/osgdb_ived.dll"
Warning: Could not find plugin to read objects from file "XXX.ive".
osgviewerd.exe: No data loaded
Viewer::~Viewer():: start destructor getThreads = 0
.......

我的系统xp,vs2003,测试之前刚刚rebuild debug 和release版本的ive plugin.

该用户从未签到

发表于 2010-11-19 12:37:31 | 显示全部楼层
ive插件需要几乎所有的osg核心库(包括osgSim,osgVolume等)作为依赖,您是否没有编译其中某个核心库的debug版本

该用户从未签到

 楼主| 发表于 2010-11-19 14:34:43 | 显示全部楼层
本帖最后由 CR苏杭 于 2010-11-19 14:39 编辑

4# array ——呃,忘记在主贴中说明了。
——编译了,release的dll和debug的dll文件是一一对应的。

该用户从未签到

发表于 2010-11-19 16:50:46 | 显示全部楼层
那么没有更多的信息,我判断不了什么了;debug版本的ive插件本身不存在问题,这个可以在我自己的系统中得到确认

该用户从未签到

 楼主| 发表于 2010-11-19 21:26:14 | 显示全部楼层
呃,那么应该怎么获得更多的信息,有建议么?

该用户从未签到

 楼主| 发表于 2010-11-21 12:08:37 | 显示全部楼层
使用$err,hr 获取到 osgDB / DynamicLibrary.cpp中 handle = LoadLibrary( libraryName.c_str() )的错误信息:
0x000036b1 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题

该用户从未签到

 楼主| 发表于 2010-11-21 18:21:49 | 显示全部楼层
呃,level up

该用户从未签到

发表于 2010-11-22 08:31:52 | 显示全部楼层
附:
听说是因为VS不能使用混合版本debug才会这样。
甚为疑惑,如果这是真的话,就意味着如果程序LoadLibrary加载了使用其他版本的VC编译的dll库,就只能一直使用Release,不能调程序了?不能这么残忍吧!
改天从装了vs2005的机器上拷贝727.4053版的msvcr80d.dll来验证一下。
差不多就是这么残忍~不满的话请直接向微软大楼扔燃烧瓶 不过幸好zlib的编译也很简单就是了

该用户从未签到

发表于 2010-11-22 14:40:46 | 显示全部楼层
嗯,自己用vs2003编译了zlib1d.dll果然就可以了

该用户从未签到

发表于 2010-11-23 09:31:15 | 显示全部楼层
万恶的vs,慢慢扔吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表