2

コーデックが利用可能ffmpegかどうかを確認しようとする単純な入門プログラムをコンパイルしようとしています。mp3コードは正常にコンパイルされますが、リンカ エラーを解決するのが困難です。コードは次のとおりです。

#include <stdio.h>
#include <math.h>
#include <libavcodec/avcodec.h>

float *generateSinusoid(unsigned int sampleRate, unsigned int nSecondsAudio) {

  unsigned int nsamples = (nSecondsAudio * sampleRate);
  float *arr;
  arr = (float*) malloc(sizeof(float) * nsamples);
  int i = 0;

  for(i = 0; i < nsamples; i++) {
    arr[i] = 20 * sin(2.f * (M_PI) * (330/sampleRate) * i);  /*frequency of 330H
z*/
  }

  return arr;

}

int main(int argc, char *argv[]) {

  avcodec_register_all();

  AVCodec *codec;

  unsigned int sampleRate = 22050;  /*assumed.*/
  unsigned int nSecondsAudio = 4;
  float *arr;
  arr = (float *) malloc(sizeof(float) * nSecondsAudio * sampleRate);

  /*Step 1. Generate sinusoid.*/
  arr = generateSinusoid(sampleRate, nSecondsAudio);

  /* Step 2. See if encoder exists.*/
  /*codec = avcodec_find_encoder(AV_CODEC_ID_MP3);*/

  if(!codec) {  /*codec = NULL.*/
    printf("MP3 codec not found!!!!");
  } else {
    printf("MP3 codec found!!!");
  }

   return 0;
}  

コードは次のようにコンパイルおよびリンクされます。

encoding_mp3: encoding_mp3.o
        gcc encoding_mp3.o -o encoding_mp3 -L/cygdrive/c/Users/Desktop/webserver/cygnus/lib/w32api -L/cygdrive/c/Users/Desktop/webserver/cygnus/ffmpeg/ffmpeg_dev/lib -lm -luser32 -lpthread -lavcodec

encoding_mp3.o: encoding_mp3.c
        gcc -I/cygdrive/c/Users/Desktop/webserver/cygnus/ffmpeg/ffmpeg_dev/include -I/cygdrive/c/Users/Desktop/webserver/cygnus/usr/include -g -c encoding_mp3.c -o encoding_mp3.o

clean:
        rm encoding_mp3.o encoding_mp3  

リンクすると、次のエラーが発生します。

gcc -I/cygdrive/c/Users/Desktop/webserver/cygnus/ffmpeg/ffmpeg_dev/include -I/cygdrive/c/Users/Desktop/webserver/cygnus/usr/include -g -c encoding_mp3.c -o encoding_mp3.o
gcc encoding_mp3.o -o encoding_mp3 -L/cygdrive/c/Users/Desktop/webserver/cygnus/lib/w32api -L/cygdrive/c/Users/Desktop/webserver/cygnus/ffmpeg/ffmpeg_dev/lib -lm -luser32 -lpthread -lavcodec
encoding_mp3.o: In function `main':
/cygdrive/c/Users/Desktop/webserver/cygnus/ffmpeg/work/encoding_mp3.c:31: undefined reference to `_avcodec_register_all'
collect2: ld returned 1 exit status
make: *** [encoding_mp3] Error 1  

私はこの問題に関して SO のほとんどのスレッドを調べましたが、これまでに試したことは次のとおりです。
- オプション以外のすべての引数の最後にライブラリを配置し
ます。これはうまくいくようです。undefined referenceすべての関数呼び出しが削除された後、エラーはなくなりますが、構造体が存在してもAVCodec問題は発生しません。

これに関するヘルプは大歓迎です。

4

0 に答える 0