Undefined References eclipse usando libav

1

Estou tentando instalar a versão mais recente da libav no site da libav . Atualmente sendo a versão 11.7. Eu descompactei, configurei, criei e fiz a instalação.

Para ./configure eu tentei usar várias opções. Como precaução, se eu adicionar / remover uma opção com ./configure, eu faria isso com uma nova cópia do código-fonte e também limparia as bibliotecas e os cabeçalhos.

As opções adicionais foram:

./configure --enable-libx264 --enable-librtmp --enable-gpl --enable-nonfree --enable-muxer=mp4 --enable-muxer=h264 --enable-demuxer=aac --enable-demuxer=h264 --enable-encoder=libx264 --enable-encoder=libfdk_aac --enable-decoder=libfdk_aac --enable-version3

Eu também cansei sem opções adicionais.

No eclipse IDE, configurei o compilador para incluir / usr / local / libs em seu caminho de pesquisa e também incluí as próprias libs.

Eu não sei mais o que fazer. Eu continuo recebendo referências indefinidas.

Editar (informações adicionais): Eu simplifiquei o código para que fosse apenas a função av_register_all () ;. Eu ainda recebo erros. Aqui estão alguns:

/usr/local/lib/libavcodec.a(libx264.o): In function 'X264_frame':
/usr/local/src/libav/libavcodec/libx264.c:140: undefined reference to 'x264_picture_init'
/usr/local/src/libav/libavcodec/libx264.c:142: undefined reference to 'x264_bit_depth'
/usr/local/src/libav/libavcodec/libx264.c:160: undefined reference to 'x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:166: undefined reference to 'x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:173: undefined reference to 'x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:192: undefined reference to 'x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:232: undefined reference to 'x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:237: undefined reference to 'x264_encoder_encode'
/usr/local/src/libav/libavcodec/libx264.c:243: undefined reference to 'x264_encoder_delayed_frames'
/usr/local/src/libav/libavcodec/libx264.c:237: undefined reference to 'x264_encoder_encode'
/usr/local/src/libav/libavcodec/libx264.c:179: undefined reference to 'x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:198: undefined reference to 'x264_encoder_reconfig'
/usr/local/src/libav/libavcodec/libx264.c:186: undefined reference to 'x264_encoder_reconfig'
/usr/local/lib/libavcodec.a(libx264.o): In function 'X264_init_static':
/usr/local/src/libav/libavcodec/libx264.c:577: undefined reference to 'x264_bit_depth'
/usr/local/lib/libavcodec.a(libx264.o): In function 'X264_close':
/usr/local/src/libav/libavcodec/libx264.c:278: undefined reference to 'x264_encoder_close'
/usr/local/lib/libavcodec.a(libx264.o): In function 'X264_init':
/usr/local/src/libav/libavcodec/libx264.c:314: undefined reference to 'x264_param_default'
/usr/local/src/libav/libavcodec/libx264.c:319: undefined reference to 'x264_param_default_preset'
/usr/local/src/libav/libavcodec/libx264.c:415: undefined reference to 'x264_param_parse'
/usr/local/src/libav/libavcodec/libx264.c:416: undefined reference to 'x264_param_parse'
/usr/local/src/libav/libavcodec/libx264.c:417: undefined reference to 'x264_param_parse'
/usr/local/src/libav/libavcodec/libx264.c:418: undefined reference to 'x264_param_parse'
/usr/local/src/libav/libavcodec/libx264.c:459: undefined reference to 'x264_param_apply_fastfirstpass'
/usr/local/src/libav/libavcodec/libx264.c:465: undefined reference to 'x264_param_apply_profile'
/usr/local/src/libav/libavcodec/libx264.c:501: undefined reference to 'x264_param_parse'
/usr/local/src/libav/libavcodec/libx264.c:519: undefined reference to 'x264_encoder_open_148'
/usr/local/src/libav/libavcodec/libx264.c:532: undefined reference to 'x264_encoder_headers'
/usr/local/lib/libavcodec.a(opusdec.o): In function 'opus_decode_subpacket':
/usr/local/src/libav/libavcodec/opusdec.c:382: undefined reference to 'avresample_is_open'
/usr/local/lib/libavcodec.a(opusdec.o): In function 'opus_decode_frame':
/usr/local/src/libav/libavcodec/opusdec.c:221: undefined reference to 'avresample_is_open'
/usr/local/lib/libavcodec.a(opusdec.o): In function 'opus_init_resample':
/usr/local/src/libav/libavcodec/opusdec.c:163: undefined reference to 'avresample_open'
/usr/local/src/libav/libavcodec/opusdec.c:169: undefined reference to 'avresample_convert'
/usr/local/lib/libavcodec.a(opusdec.o): In function 'opus_decode_frame':
/usr/local/src/libav/libavcodec/opusdec.c:236: undefined reference to 'avresample_convert'
/usr/local/lib/libavcodec.a(opusdec.o): In function 'opus_flush_resample':
/usr/local/src/libav/libavcodec/opusdec.c:118: undefined reference to 'avresample_convert'
/usr/local/lib/libavcodec.a(opusdec.o): In function 'opus_decode_subpacket':
/usr/local/src/libav/libavcodec/opusdec.c:414: undefined reference to 'avresample_close'
/usr/local/lib/libavcodec.a(opusdec.o): In function 'opus_decode_flush':
/usr/local/src/libav/libavcodec/opusdec.c:616: undefined reference to 'avresample_close'
/usr/local/lib/libavcodec.a(opusdec.o): In function 'opus_decode_close':
/usr/local/src/libav/libavcodec/opusdec.c:640: undefined reference to 'avresample_free'
/usr/local/lib/libavcodec.a(opusdec.o): In function 'opus_decode_init':
/usr/local/src/libav/libavcodec/opusdec.c:704: undefined reference to 'avresample_alloc_context'
/usr/local/lib/libavcodec.a(pthread_frame.o): In function 'ff_frame_thread_free':
/usr/local/src/libav/libavcodec/pthread_frame.c:522: undefined reference to 'pthread_join'
/usr/local/lib/libavcodec.a(pthread_frame.o): In function 'ff_frame_thread_init':
/usr/local/src/libav/libavcodec/pthread_frame.c:648: undefined reference to 'pthread_create'
/usr/local/lib/libavcodec.a(pthread_slice.o): In function 'ff_slice_thread_free':
/usr/local/src/libav/libavcodec/pthread_slice.c:110: undefined reference to 'pthread_join'
/usr/local/lib/libavcodec.a(pthread_slice.o): In function 'ff_slice_thread_init':
/usr/local/src/libav/libavcodec/pthread_slice.c:211: undefined reference to 'pthread_create'
collect2: error: ld returned 1 exit status

Para ser mais específico, as bibliotecas são instaladas no diretório / usr / local / lib, os cabeçalhos são instalados / usr / local / include / libav *. Também tentei compilar meu código-fonte por linha de comando, em vez de o IDE fornecer o mesmo resultado.

argumento da linha de comando:

c++ -L/usr/local/lib test.cpp -lx264 -lavresample -lavformat -lavutil -lavcodec -lavutil -lz -lavutil -o out
    
por cmacia06 18.07.2016 / 02:50

2 respostas

0

O problema é que as bibliotecas libav devem ser especificadas em uma ordem específica para resolver todas as dependências. Consegui encontrar a ordem correta compilando sem bibliotecas adicionais primeiro. Então, quando o compilador reclamou de uma referência não resolvida, localizei a biblioteca pesquisando qual biblioteca a função pertencia. Eu fiz isso até que todas as dependências fossem resolvidas. A ordem resultante foi

  1. avformat
  2. avcodec
  3. avutil
  4. z
  5. x264
  6. pthread
  7. avresample

Usando g + + para compilar o código, usei este comando:

c++ ./main.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil -lz -lx264 -lpthread -lavresample -o output

E é assim que deve ficar no eclipse:

    
por cmacia06 19.07.2016 / 02:26
0

Verifique se você tem este bloco:

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

Nos arquivos demux.cpp e codec.cpp também.

EDITAR

Tentou fazer o que você fez e funcionou bem. Aqui está o que eu fiz:

$ cat av.cpp 
extern "C" {
#include <libavformat/avformat.h>
}
int main(void)
{
  av_register_all();
  return 0;
}
$ g++ av.cpp -lavformat
$ ./a.out 

HTH

    
por sмurf 18.07.2016 / 03:23