2017-07-18 4 views
1

Ich versuche, ein libavcodec Beispiel zu kompilieren. Ich erhalte die folgende Fehlermeldung:Verknüpfung mit libavcodec, immer noch undefined Referenzen

[email protected]:~/p/avtest$ g++ main.cpp -o main -lavcodec 
main.cpp: In function ‘void audio_decode_example(const char*, const char*)’: 
main.cpp:57:15: warning: ‘int avcodec_decode_audio4(AVCodecContext*, AVFrame*, int*, const AVPacket*)’ is deprecated [-Wdeprecated-declarations] 
     len = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt); 
       ^~~~~~~~~~~~~~~~~~~~~ 
In file included from main.cpp:1:0: 
/usr/include/x86_64-linux-gnu/libavcodec/avcodec.h:4773:5: note: declared here 
int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, 
    ^~~~~~~~~~~~~~~~~~~~~ 
main.cpp:57:73: warning: ‘int avcodec_decode_audio4(AVCodecContext*, AVFrame*, int*, const AVPacket*)’ is deprecated [-Wdeprecated-declarations] 
     len = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt); 
                     ^
In file included from main.cpp:1:0: 
/usr/include/x86_64-linux-gnu/libavcodec/avcodec.h:4773:5: note: declared here 
int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, 
    ^~~~~~~~~~~~~~~~~~~~~ 
/tmp/ccbXVtbs.o: In function `audio_decode_example(char const*, char const*)': 
main.cpp:(.text+0x37): undefined reference to `av_init_packet(AVPacket*)' 
main.cpp:(.text+0x63): undefined reference to `avcodec_find_decoder(AVCodecID)' 
main.cpp:(.text+0xa4): undefined reference to `avcodec_alloc_context3(AVCodec const*)' 
main.cpp:(.text+0xf1): undefined reference to `avcodec_open2(AVCodecContext*, AVCodec const*, AVDictionary**)' 
main.cpp:(.text+0x19c): undefined reference to `av_free(void*)' 
main.cpp:(.text+0x203): undefined reference to `av_frame_alloc()' 
main.cpp:(.text+0x266): undefined reference to `avcodec_decode_audio4(AVCodecContext*, AVFrame*, int*, AVPacket const*)' 
main.cpp:(.text+0x2b8): undefined reference to `av_get_bytes_per_sample(AVSampleFormat)' 
main.cpp:(.text+0x460): undefined reference to `avcodec_close(AVCodecContext*)' 
main.cpp:(.text+0x46c): undefined reference to `av_free(void*)' 
main.cpp:(.text+0x47b): undefined reference to `av_frame_free(AVFrame**)' 
collect2: error: ld returned 1 exit status 

Wie Sie sehen, ich bin die Verknüpfung mit libavcodec aber noch undefinierte Referenzen bekommen. Gibt es noch etwas, mit dem ich verlinken muss, um diese Symbole zu definieren?

+0

Mögliches Duplikat von [Was ist ein undefinierter Verweis/ungelöster externer Symbolfehler und wie behebe ich ihn?] (Https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved- externe-symbol-error-and-how-do-i-fix – patatahooligan

Antwort

1

Ich fragte im IRC, und die Antwort sollte extern "C" gelten. Ich änderte sich dies:

#include <libavcodec/avcodec.h> 

dazu:

extern "C" { 
    #include <libavcodec/avcodec.h> 
} 

in der Quelldatei, und jetzt kompiliert ohne Fehler.

Verwandte Themen