Loading

编译osg后,应用程序初始化失败(0xc0150002)的问题

          现象:跟踪查找,发现问题是由于编译生成的osgDBd.lib中包括了zlib1d.lib,查看系统日志有3个SideBySide错误,错误内容如下:"找不到附属汇编 Microsoft.VC80.DebugCRT,上一个错误是 参照的汇编没有安装在系统上。"

关于“应用程序正常初始化(0xc0150002)失败”问题的解决方案 - AK-47 - 天才
图2:系统日志
在去XP系统目录中的WinSxs中找了一下,发现果然没 x86_Microsoft.VC80.DebugCRT之类的文件件。
 
关于“应用程序正常初始化(0xc0150002)失败”问题的解决方案 - AK-47 - 天才
图3:系统目录
现在问题原因就明朗很多了,我们所编译生成的应用程序由于缺少必需的Debug版本的VC运行库而发生错误。
          明明有zlib1d.lib,为什么会提示缺少必需的Debug版本的VC运行库呢?经过查找manifest文件,发现如下信息:

<dependency>

    <dependentAssembly>

      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

    </dependentAssembly>

  </dependency>

  <dependency>

    <dependentAssembly>

      <assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

    </dependentAssembly>

  </dependency>

          为什么一个库还要同时依赖2个版本的VC运行时呢?因为zlib1d.lib这个第三方库是用vs2005编译的,而我们编译osg源码用的是vs2008。

          原因:3rdParty”中的*d.lib与你所用的vs版本不同

    解决方法:一、将3rdParty/bin中的*.lib改为*d.lib;二、下载第三方依赖库源码重新用vs2008生成lib文件。

 

参考信息:

http://lixinyiabc123.blog.163.com/blog/static/140977406201022891532282/

posted @ 2012-06-06 21:48  redrose007  阅读(778)  评论(0编辑  收藏  举报