Ogg vorbis崩溃

时间:2014-11-01 22:19:49

标签: visual-studio-2010 oggvorbis

我试图在我的项目(C ++,VS 2010)中添加对 Ogg Vorbis 的支持。我编译 LibOgg + LibVorbis 来生成静态库没有问题。

我的程序是:

LibOgg

  • 下载LibOgg
  • 使用动态解决方案构建LibOgg(发布)
  • / Release 文件夹中获取 libogg.lib 导出和 libogg.dll

LibVorbis

  • 下载LibVorbis
  • LibOgg
  • 设置适当的 include + library 文件夹
  • 使用动态解决方案构建LibVorbis(发布)
  • 获取 libvorbis.lib libvorbisfile.lib 导出以及 libvorbis.dll libvorbisfile.dll / Release 文件夹

我的计划

  • Libogg + LibVorbis .lib exports
  • 设置适当的 include + library 文件夹
  • .dll 放入工作目录

构建成功但与静态构建(工作原理)不同,动态构建在第一个ov_open调用(打开一些.ogg文件)时崩溃。我建了很多库(GLEW,SQlite等)但这个给了我坚果。

1 个答案:

答案 0 :(得分:1)

没关系,我解决了这个问题。 由于 stdio.h 和{的一些链接问题,似乎 OggVorbis Windows 和使用ov_open时非常敏感{1}}。

Documentation清楚地说:

  

Windows开发人员的警告:不要在Windows中使用ov_open()   应用; Windows链接对传递文件的地方限制*   成功处理,ov_open()违反这些限制   [一个]。有关使用的详细信息,请参阅ov_open_callbacks()页面   相反,ov_open_callbacks()。

尽管docs建议使用回调,但我发现fopen是可靠的,它适用于使用OggVorbis的静态和动态构建;如果您在 Windows 上使用ov_fopen,动态构建将会崩溃

在我针对Linux和OSX进行测试后,要更新此答案,以验证ov_open是一个安全的解决方案。

<强>更新

如上所述,我在 Windows 7,Linux(Lubuntu),OSX(10.8.2)和Android(KitKat 4.4.4)上测试了ov_fopen的使用情况,我发现了这是可靠的。因此,对于对回调过敏的人(像我一样),ov_fopen可靠地证明了。