2017-08-01 9 views
1

FFMPEGを使って独自のプロジェクトを作成して、プレーヤーをビルドしたいと思いますが、ffmpegライブラリを組み込むために新しいファイルを作成するのは簡単ではないようです。私はffmpegを構成してビルドを行いました。自分のC++プロジェクトのFFMPEGライブラリの使用

./configure

./make

のffmpegのhello worldプログラム(myffmpeg.c):

#include <libavformat/avformat.h> 
int main(int argc, char *argv[]) { 
    av_register_all(); 
    return 0; 
} 

が、私はallformatsをリンクしようとすると、それは

clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated

Undefined symbols for architecture x86_64:

"av_register_all()", referenced from:

_main in myffmpeg-61ec1b.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation

を示しています。 oファイル内にav_register_all関数があります。私が得た:

clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated Undefined symbols for architecture x86_64: "_av_register_input_format", referenced from: _register_all in allformats.o "_av_register_output_format", referenced from: _register_all in allformats.o "_avcodec_register_all", referenced from: _register_all in allformats.o "_ff_a64_muxer", referenced from: _register_all in allformats.o

...

"_ff_yuv4mpegpipe_muxer", referenced from: _register_all in allformats.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

誰かが私にffmpegのライブラリ関数を呼び出す方法についていくつかのヒントを与えることができるそれは、私の悪いMakefileの知識すべきですか?あるいは自分のプログラムをビルドするためにMakefileを変更する方法さえ?ありがとう!

*アップデート: 私のコンパイルコマンドの問題かもしれませんが、それはコンパイルの方法ですか?

g++ myffmpeg.c

+0

Makefileを含むいくつかの例を見たい場合は、 'doc/examples'を参照してください。下の回答のようにヘッダーを折り返してください。 – aergistal

答えて

1

私は自分自身に答えることができると思います。

g++ -o main.o main.c `pkg-config --cflags --libs libavformat` 

私は今、その理由を知らない、それはhttps://soledadpenades.com/2009/11/24/linking-with-ffmpegs-libav/

から我々はまだ下の答えを参照してくださいにexternが必要です。

3

多分問題は、C++は関数を装飾していることです。したがって、CコンパイラとC++でコンパイルされた同じ関数はリンカと異なって見えます。これを試してください:

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

このコードは、コンパイラにそのファイルの関数を装飾しないように指示したことを意味します。

+0

私はこれを追加しましたが、どちらもうまくいきません。 –

+0

このexternがまだ必要です.pkg-configは動作します。 –

関連する問題