gcc: referência indefinida a
Programa.c
#include <libavcodec/avcodec.h>
int main(){
int i = avpicture_get_size(AV_PIX_FMT_RGB24,300,300);
}
a executar isto
gcc -I$HOME/ffmpeg/include program.c
dá um erro
/tmp/ccxMLBme.o: In function `main':
program.c:(.text+0x18): undefined reference to `avpicture_get_size'
collect2: ld returned 1 exit status
No entanto, avpicture_get_size está definido. Porque é que isto está a acontecer?
2 answers
No entanto, avpicture_get_size está definido.
Não, como o cabeçalho (<libavcodec/avcodec.h>
) apenas declara Isso.
A definição está na própria biblioteca.
Por isso, poderá querer adicionar a opção linker ao link libavcodec
ao invocar o gcc:
-lavcodec
Por favor, note também que as bibliotecas precisam de ser especificadas na linha de comandos após os ficheiros que necessitam deles:
gcc -I$HOME/ffmpeg/include program.c -lavcodec
Não Tipo isto:
Actualizar: Referindo-se a Wyzard's comentário o comando completo pode ser parecido com este: Para As bibliotecas não armazenadas na localização-padrão dos linkers, a opção Para uma referência detalhada sobre a opção do linker do gcc, por favor leia aqui.gcc -lavcodec -I$HOME/ffmpeg/include program.c
gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lavcodec
-L
indica um caminho de pesquisa adicional para as bibliotecas de pesquisa indicadas com a opção -l
, isto é libavcodec.x.y.z
neste caso.
#if defined(__cplusplus)
extern "C" { // Make sure we have C-declarations in C++ programs
#endif
E:
#if defined(__cplusplus)
}
#endif