0

私のプロジェクト(C++、VS 2010)にOgg Vorbisのサポートを追加しようとしています。LibOgg + LibVorbisをコンパイルしてスタティック ライブラリを作成するのに問題はありませんでした。

私の手順は次のとおりです。

LibOgg

  • LibOgg をダウンロード
  • 動的ソリューションで LibOgg をビルドする (リリース)
  • /Releaseフォルダーでlibogg.libエクスポートとlibogg.dllを取得します。

LibVorbis

  • LibVorbis をダウンロード
  • LibOggに適切なインクルード + ライブラリフォルダーを設定する
  • 動的ソリューションで LibVorbis をビルドする (リリース)
  • libvorbis.libおよびlibvorbisfile.libエクスポートとlibvorbis.dllおよびlibvorbisfile.dll/Releaseフォルダーに取得します。

私のプログラム

  • Libogg + LibVorbis .lib エクスポート用に適切なインクルード + ライブラリフォルダーを設定します。
  • 作業ディレクトリに.dllを配置します

ビルドは成功しますが、静的ビルド (機能する) とは異なり、動的ビルドは最初のov_open呼び出し (いくつかの .ogg ファイルを開く) でクラッシュするだけです。私はたくさんのライブラリ(GLEW、SQlite など)を構築しましたが、これは私にナッツを与えてくれます。

4

1 に答える 1

1

気にしないで、私はこれを解決します。OggVorbisは、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て、安全なオールラウンド ソリューションであることを確認した後、この回答を更新します。

アップデート

前述のように、Windows 7、Linux (Lubuntu)、OSX (10.8.2)、および Android (KitKat 4.4.4) での使用をテストしたところ、ov_fopen確実動作することがわかりました。したがって、(私のような) コールバックにアレルギーがある人にとっては、ov_fopen確実に証明されました。

于 2014-11-01T23:12:32.517 に答える