FFMPEG: undefined reference to `avcodec_register_all' kein link
Also ich habe ein sehr Beispiel-code für den Versuch zu entschlüsseln FFMPEG-video-stream.
Mein problem ist avcodec nicht verlinken möchten, tun, damit ich eine saubere installation von Ubuntu 13.04. Ich habe die build von ffmpeg aus dem Quellcode nach der Anleitung hier: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
Ich will einfach nur meine Datei kompilieren. Beachten Sie, dass mein ubuntu nicht alle Implementierungen oder header-Dateien für avcodec. Die Befehlszeile, die ich benutze ist:
gcc -I/home/USER/ffmpeg_build/include -L/home/USER/ffmpeg_build/lib -lavcodec -o test.exe Downloads/auv/src/dronerosvideo/src/ar2.cpp
/tmp/ccKTprFq.o: In Funktion `fetch_and_decode(int, int, bool)':
ar2.cpp:(.text+0x36e):
undefined reference to `avcodec_register_all'ar2.cpp:(.text+0x378):
undefined reference to `av_log_set_level'ar2.cpp:(.text+0x382):
undefined reference to `avcodec_find_decoder'ar2.cpp:(.text+0x3b1):
undefined reference to `avcodec_alloc_context3'ar2.cpp:(.text+0x3d6):
undefined reference to `avcodec_open2'ar2.cpp:(.text+0x46d):
undefined reference to `av_init_packet'ar2.cpp:(.text+0x50a):
undefined reference to `avcodec_decode_video2'ar2.cpp:(.text+0x534):
undefined reference to `av_free_packet'/tmp/ccKTprFq.o:(.eh_frame+0x13): undefined reference to
`__gxx_personality_v0'collect2: Fehler: ld zurückgegeben, 1 exit status
Nur für einen vernünftigen test wenn ich entfernen Sie die argument-L compiler sagt:
/usr/bin/ld: cannot find -lavcodec
Was bedeutet, dass der linker findet die Bibliothek in /home/USER/ffmpeg_build/lib. Auch wenn man die Bibliothek für die Umsetzung vorhanden:
nm ffmpeg_build/lib/libavcodec.a | grep "register_all"
0000000000000000 T avcodec_register_all
Auch, wie empfohlen, da es auf C++ habe ich exten "C"
um umfassen die Bibliothek.
In diesem Punkt bin ich Herausfallen irgendwelche Ideen, warum genau Kompilierung fehlschlägt?
/usr/bin/ld
ist der linker. Sie meinte wahrscheinlich : "der linker findet die Bibliothek in/home/USER/ffmpeg_build/lib
'.- Ja richtig!!!! Ich werde es ändern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens, es ist C++, also müssen Sie verwenden
g++
nichtgcc
so, dass der C++ - standard-Bibliothek wird verknüpft. Dies sollte loszuwerdenundefined reference to '__gxx_personality_v0'
.Dann, die Reihenfolge der libaries link ist tatsächlich wichtig.
Sie müssen angeben, eine Bibliothek nach das Objekt (oder die Quelle oder eine andere Bibliothek) verwenden.
Setzen Sie zusammen, eine Befehlszeile wie das funktioniert (in meinen tests):
(Tatsächlich, je nachdem, wie ffmpeg gebaut wurde, müssen Sie möglicherweise andere Bibliotheken wie pthreads oder libx264)
Wenn Sie pkg-config installiert ist, könnte es möglich sein, Fragen Sie einfach, dass es für eine ordnungsgemäße clags: