1. ホーム
  2. c++

[解決済み] gcc: 未定義の参照

2022-03-05 20:50:23

質問

これをコンパイルしたいのですが。

プログラム.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> ) ちょうど を宣言しています。 それを

は、その 定義 は、ライブラリ自体にあります。

そこで、リンカーオプションを追加して、リンクするのがよいでしょう libavcodec gccを起動する際に

-lavcodec


また、ライブラリはコマンドラインで指定する必要があることに注意してください。 を使用する必要があります。

gcc -I$HOME/ffmpeg/include program.c -lavcodec

ない このように

gcc -lavcodec -I$HOME/ffmpeg/include program.c


を参照してください。 ワイザード のコメントにあるように、完全なコマンドは次のようになります。

gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lavcodec

リンカの標準的な場所に保存されていないライブラリの場合、オプションの -L で指定されたライブラリを検索するための追加の検索パスを指定します。 -l オプション、つまり libavcodec.x.y.z この場合


GCCのリンカーオプションに関する詳しいリファレンスはこちら。 こちらをご覧ください。 .