6

疑难杂症又一记

 3 years ago
source link: https://blog.csdn.net/tkokof1/article/details/83655384
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
疑难杂症又一记_tkokof1的专栏-CSDN博客

本文简述了一种 OGRE 示例程序 SampleBrowser 运行出错的解决方法

下了 OGRE 的 1.10.11 版本,使用 CMake 生成了相应的工程文件,遂而编译源码和示例,一切都挺顺利,但是当尝试 Debug 模式下执行 SampleBrowser 时却报了错: Unable to read zip file …

在这里插入图片描述

简单google了一下,大部分的说法都是配置的资源路径有问题,尝试修改了一下,未能解决问题,于是索性调试源码了.

不过调试的结果有些奇怪,错误似乎发生在依赖库 zzip 中,出错的 API 调用是这个:

在这里插入图片描述

简单跟了一下 zzip 的内部代码,发现出错点好像是发生在运行时库中,这让人觉得困惑.

后来尝试 Release 模式运行了一下 SampleBrowser ,没想竟然成功了!遂而比较了一下差异,最后发现是运行时库的冲突导致了这个问题,简而言之, zzip 是静态链接入程序中的,其使用的是 多线程DLL(/MD) 运行时库,而程序本身使用的是 多线程调试DLL(/MDd) 运行时库(Debug模式下),运行时库的冲突导致了诸如 fstat 等标准库函数的执行异常,继而导致了上述的加载出错问题.

解决方法也简单, Debug 模式下链接 zzip 的调试库即可(下载生成的 OGRE 工程中即带有 zzip 项目).

现在终于可以在 Debug 模式下正确执行 SampleBrowser 了~

在这里插入图片描述

这里有一个相关的讨论.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK