2

ffmpegライブラリをダウンロードしてインストールしました。異なるビデオの別々のフレームを読んでそれらを操作するためにそれを使用したいと思います。そのために、私はここからいくつかのチュートリアルに従おうとしました:http: //dranger.com/ffmpeg/tutorial01.html しかし、次のコンパイルを取得したため、cppファイルをコンパイルできません。

Undefined symbols for architecture x86_64:
  "av_register_all()", referenced from:
      _main in cc9zyUBe.o
      _main in ccRz35d4.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

ffmpegライブラリをインストールするときに、。/configureステップでarch=x86_64オプションを使用しました。OS X MountainLion10.8.2およびgcc4.2コンパイラを使用しています。誰かがこのエラーの原因となる可能性のある手がかりを持っていますか?前もって感謝します。

更新:静的ライブラリ、共有ライブラリ、-arch = x86_64オプションの有無にかかわらず、さまざまなインストールオプションをすでに試しました。また、自作でそれをインストールしました、結果は同じままです。ライブラリが認識されません。しかし、ffmpegバイナリをコマンドラインツールとして使用すると、かなりうまく機能します。

4

2 に答える 2

9

最後に、ffmpegライブラリを使用するプログラムをコンパイルすることができました。

何らかの理由で、gccコンパイラを使用してコンパイルすることはできませんでしたが、g++コンパイラを使用してコンパイルすることはできました。

静的ライブラリをインストールする場合は、すべての依存関係を明示的に指定する必要があり、これらのライブラリのリンク順序も重要です。これが私のプログラムを最終的にコンパイルしたコンパイルコードです:

g++ readVideo.cc -o readVideo $(pkg-config --libs --cflags libavformat)

pkg-configこれは、指定されたライブラリを適切にリンクするために必要なすべてのフラグとライブラリを出力するユーティリティですlibavformat

また、ソースファイルの名前がreadVideo.CからreadVideo.ccに変更され、#includeステートメントがextern "C"次のように含まれていることにも言及する価値があります。

extern "C" {
  #include <libavformat/avformat.h>
}

ffmpegはCプロジェクトであり、Cライブラリであると明示的に指定しないと、プログラムはC++コンパイラでコンパイルされないために必要です。

また、ffmpegライブラリのすべての依存関係をわざわざ含めたくない場合はpkg-config、静的ライブラリの代わりに共有ライブラリを使用してffmpegをインストールできます。次に、より簡単な呼び出しでコンパイルします。

g++ readVideo.cc -o readVideo -lavformat

./configure共有ライブラリをインストールするには、 ffmpegをインストールするときにプログラムに次の2つのオプションを追加する必要があります。

--disable-static --enable-shared

それが誰かにいつか役立つことを願っています...

于 2012-11-15T12:54:11.147 に答える
0

エラーは、ffmpegライブラリにリンクしていないことを意味します。ヘッダーファイルを含めるだけでは不十分です。実際のライブラリファイルにもリンクする必要があります。Windowsでは.lib拡張子が付いていますが、Linuxでは通常.a拡張子が付いていますが、Macについてはよくわかりません。

于 2012-10-16T09:18:49.263 に答える