在程序编译过程中,ffmpeg部分遇到了这样那样的问题,现总结如下:
1. uncompress未定义的引用
ffmpeg-4.0.2/libavcodec/cscd.c:93:对‘uncompress’未定义的引用
/usr/local/lib/libavcodec.a(dxa.o):在函数‘decode_frame’中:
ffmpeg-4.0.2/libavcodec/dxa.c:250:对‘uncompress’未定义的引用
/usr/local/lib/libavcodec.a(exr.o):在函数‘pxr24_uncompress’中:
ffmpeg-4.0.2/libavcodec/exr.c:837:对‘uncompress’未定义的引用
/usr/local/lib/libavcodec.a(exr.o):在函数‘zip_uncompress’中:
ffmpeg-4.0.2/libavcodec/exr.c:273:对‘uncompress’未定义的引用
...
解决方法,在Makefile中添加-lz
:
LIB := -lz
2. swr_is_initialized未定义的引用
对‘swr_is_initialized’未定义的引用
对‘swr_is_initialized’未定义的引用
对‘swr_init’未定义的引用
对‘swr_convert’未定义的引用
对‘swr_convert’未定义的引用
对‘swr_convert’未定义的引用
对‘swr_close’未定义的引用
对‘swr_close’未定义的引用
对‘swr_free’未定义的引用
对‘swr_alloc’未定义的引用
collect2: error: ld returned 1 exit status
解决办法,在Makefile中添加-lswresample
:
LIB := -lswresample
3. 在Qt工程中的引用顺序
引用顺序,-lavdevice ,-lavformat , -lavcodec, -lavutil, -lavfileter, -lswscale, -lswresample。前四个顺序固定,后面可以随意。
执行pkg-config --libs libavdevice libavformat libavcodec libavfilter libavutil libswscale libswresample,获取所有支持库。放到qt工程文件 LIBS +=后面。