启用avfilter编译FFmpeg相关C++程序报未定义符号错误
报错原因
所有未定义的_pp_*前缀符号均属于FFmpeg配套的libpostproc(视频后处理)库导出接口。启用滤镜功能时,libavfilter中的vf_pp后处理滤镜模块会被链入,该模块强依赖libpostproc的实现;当前链接参数列表未包含这个库,因此触发x86_64架构下的符号未定义错误。不启用滤镜时不会链入vf_pp相关目标文件,因此编译可正常通过。
修复方法
在CMake的链接选项中补充-lpostproc链接项即可。静态库链接需遵守依赖顺序规则:依赖其他库的模块靠前放置,被依赖的库靠后放置,因此-lpostproc需要加在-lavfilter项之后。
修改后的配置参考:
set(FFMPEG_OPTIONS "-Wl,-no_compact_unwind -L/usr/local/lib" "-L/usr/lib" "-lbz2" "-liconv" "-lz" "-lavutil" "-lavcodec" "-lavdevice" "-lavformat" "-lavfilter" "-lpostproc" "-lswresample" "-lswscale" "-lx264" "-pthread" "-lm" "-framework AudioUnit" "-framework AudioToolbox" "-framework CoreAudio" "-framework VideoToolbox" "-framework CoreFoundation" "-framework CoreMedia" "-framework CoreVideo" "-framework CoreGraphics" "-framework CoreImage" "-framework CoreServices" "-framework Security" "-framework Foundation" "-framework AppKit") target_link_libraries(main PUBLIC ${FFMPEG_OPTIONS})
若为自行编译安装的FFmpeg,需确认编译配置时开启了
--enable-postproc选项,保证系统链接搜索路径下存在libpostproc静态库或动态库文件。
内容的提问来源于stack exchange,提问作者pmike
相关产品推荐
相关产品推荐

