0

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

我的程序是这样的:

LibOgg

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

LibVorbis

  • 下载 LibVorbis
  • LibOgg设置适当的包含 + 库文件夹
  • 使用动态解决方案构建 LibVorbis (Release)
  • /Release文件夹中获取libvorbis.liblibvorbisfile.lib导出以及libvorbis.dlllibvorbisfile.dll

我的程序

  • 为Libogg + LibVorbis .lib 导出设置适当的包含 + 库文件夹
  • .dll放在工作目录中

构建成功,但与静态构建(有效)不同,动态构建只是在第一次ov_open调用中崩溃(打开一些 .ogg 文件)。我构建了很多库(GLEW、SQlite 等),但这个库让我很吃惊。

4

1 回答 1

1

没关系,我解决这个问题。由于stdio.h和. _ _ _ _ _ov_openfopen

文档清楚地说明了这一点:

警告 Windows 开发人员:不要在 Windows 应用程序中使用 ov_open();Windows 链接对成功传递 FILE * 句柄施加了限制,并且 ov_open() 运行违反了这些限制 [a]。有关使用 ov_open_callbacks() 的详细信息,请参阅 ov_open_callbacks() 页面。

尽管文档建议使用回调,但我发现ov_fopen它对于使用 OggVorbis 进行静态和动态构建都很可靠;如果您在Windows上使用,动态构建将使您的程序崩溃ov_open

在我针对 Linux 和 OSX 测试它以验证ov_fopen它是一个安全的、全方位的解决方案之后,我会更新这个答案。

更新

如前所述,我测试了ov_fopenWindows 7、Linux (Lubuntu)、OSX (10.8.2) 和 Android (KitKat 4.4.4)上的使用,我发现它工作可靠。所以,对于那些对回调过敏的人(比如我)来说,ov_fopen证明是可靠的。

于 2014-11-01T23:12:32.517 回答