VC2010 でコンパイルしているアプリの 1 つで libVLC を使用しています (VC2008 も試しました)。アプリのデバッグ モードはうまく機能しますが、リリース モードにコンパイルして libVLC を呼び出そうとするとすぐにクラッシュします。私は vlc フォーラムで助けを求めましたが、これは通常、呼び出し規約の違いを指していると誰かが言いましたが、これが事実であるか、さらに重要なことにそれを修正する方法を確認するために何を確認すればよいかわかりません。
いくつかのメモ:
- Ubuntu を使用して libVLC をコンパイルし、libVLC wiki のハウツー ガイドに従っています。
- C++ ファイル内で libVLC を使用しています。
- デバッグ情報の有無にかかわらず、libVLC をコンパイルしてみました。
- 最初の呼び出しとして libvlc_get_version と libvlc_new を呼び出してみましたが、どちらもクラッシュします。
私のリリース バージョンにはシンボルがありませんが、コール スタックを見ることができます。スタック内の関数が決して呼び出されていないことを示しているため、間違いなくめちゃくちゃになっています。これは、間違った呼び出し規則を示しているようですが、やはり私はこれを確認/修正する方法がわかりません。
それが関連しているかどうかはわかりませんが、libvlc で発生している別の問題は、dll のロードを遅らせようとしていることです (上記の問題でこれを実行しようとはしませんでしたが、違いはありませんでした)。 linker flags: /DELAYLOAD:libvlc.dll /DELAYLOAD:libvlccore.dll
、しかし、リンクが発生すると、次の警告が表示されます。
LINK : warning LNK4199: /DELAYLOAD:libvlc.dll ignored; no imports found from libvlc.dll
LINK : warning LNK4199: /DELAYLOAD:libvlccore.dll ignored; no imports found from libvlccore.dll
ただし、それは間違いなくlibにリンクしており、Dependency Walkerで見られるようにdllを必要としています(私が呼び出していることは言うまでもありません)。
これに関するアドバイス/ヘルプに感謝します。ありがとう!