これをコンパイルしたいと思います。
program.c
#include <libavcodec/avcodec.h>
int main(){
int i = avpicture_get_size(AV_PIX_FMT_RGB24,300,300);
}
これを実行する
gcc -I$HOME/ffmpeg/include program.c
エラーを与える
/tmp/ccxMLBme.o: In function `main':
program.c:(.text+0x18): undefined reference to `avpicture_get_size'
collect2: ld returned 1 exit status
ただし、avpicture_get_sizeは定義されています。なぜこうなった?
ただし、avpicture_get_sizeは定義されています。
いいえ、ヘッダー(<libavcodec/avcodec.h>
)が宣言するだけです。
definitionはライブラリ自体にあります。
そのため、gccを呼び出すときにlibavcodec
をリンクするリンカーオプションを追加することができます。
-lavcodec
また、ライブラリはコマンドラインで指定する必要があることに注意してくださいafterそれらを必要とするファイル:
gcc -I$HOME/ffmpeg/include program.c -lavcodec
Notこのように:
gcc -lavcodec -I$HOME/ffmpeg/include program.c
更新:
Wyzardのコメントを参照すると、完全なコマンドは次のようになります。
gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lavcodec
リンカの標準の場所に保存されていないライブラリの場合、オプション-L
は、-l
オプションを使用して指定されたルックアップライブラリへの追加の検索パスを指定します。この場合はlibavcodec.x.y.z
です。
Gccのリンカーオプションの詳細なリファレンスについては、 こちらをお読みください 。
CとC++を混合していますか?発生する可能性のある問題の1つは、.cファイルの.hファイル内の宣言を次のように囲む必要があることです。
#if defined(__cplusplus)
extern "C" { // Make sure we have C-declarations in C++ programs
#endif
そして:
#if defined(__cplusplus)
}
#endif