Voglio creare un eseguibile collegato in modo statico collegato staticamente a libavcodec e libavformat. La libreria ffmpeg statica era costruire con:Riferimento non definito a avcodec_alloc_context ma l'ordine del linker ffmpeg è corretto?
./configure --enable-static --enable-gpl --enable-nonfree --disable-vaapi
--disable-libopus --prefix=myBuild --disable-swresample
I linker sono impostati come segue:
g++ -O2 -static -o myBin myBin-myBin.o someotherlibraries.a
-L/ffmpeg/myBuild/lib -lavformat -lavcodec -lavutil -lrt -lm -lpthread -lz
Quando si compila, ottengo SOLO messaggio di errore>: -/
src/ffmpeg/myProgram.cpp:115: error: undefined reference to 'avcodec_alloc_context'
Output di nm /ffmpeg/myBuild/lib/libavcodec.a | grep avcodec_alloc_context:
U avcodec_alloc_context3
U avcodec_alloc_context3
000003c0 T avcodec_alloc_context3
U avcodec_alloc_context3
includo libavcodec.h con extern "C" {} e credo che il mio ordine linker statico è corretto. Perché ottengo questo errore? È perché questo metodo è stato deprecato? Come posso risolvere questo?
SOLUZIONE:
Non utilizzare
avCtx = avcodec_alloc_context()
da frammenti di codice forse più anziani, ma utilizzare
codec = avcodec_find_decoder(CODEC_ID_XYZ);//for completeness but should be the same as before
avCtx = avcodec_alloc_context3(codec)
Qual è l'output di 'nm /ffmpeg/myBuild/lib/libavcodec.a | grep avcodec_alloc_context'? –
Ho aggiunto l'output al mio post – user2212461
@PaoloBonzini ti dice qualcosa? – user2212461