CMake项目如何添加libvpx 正确链接启用libvpx的FFmpeg库
链接错误的核心原因
你之前的写法存在两个明确问题:
target_link_libraries传入的是目录路径,不是具体的链接目标,链接器无法正常解析- 开启libvpx支持的FFmpeg有严格的库依赖链,漏链依赖库、链接顺序错误都会触发undefined reference类链接报错
正确CMake配置流程
- 先指定自编译FFmpeg的安装路径
建议配置FFmpeg时通过
./configure --prefix=你的自定义安装路径 --enable-libvpx指定独立安装目录,避免和系统自带FFmpeg版本冲突,编译完成后执行make install将头文件、库文件统一归集到该目录后再做CMake配置。
在CMakeLists.txt最开头添加路径配置:
# 替换为你自己的FFmpeg实际安装根目录 set(CUSTOM_FFMPEG_ROOT "/opt/ffmpeg_libvpx" CACHE PATH "Self-compiled FFmpeg install path") # 引入FFmpeg头文件目录 include_directories(${CUSTOM_FFMPEG_ROOT}/include) # 添加FFmpeg库搜索路径 link_directories(${CUSTOM_FFMPEG_ROOT}/lib)
- 按正确依赖顺序配置链接
使用GCC类链接器时要注意:被依赖的库需要放在依赖它的库后面,顺序错了也会报链接错误。VP8编码场景需要的链接目标如下,注意不要漏加libvpx和对应的系统依赖库:
# 替换为你自己的可执行文件目标名、源文件列表 add_executable(main main.cpp vp8_encoder.cpp) target_link_libraries(main avcodec avformat avutil swscale swresample vpx # 对应开启的libvpx VP8编解码库,漏加会直接报VP8相关接口链接错误 pthread dl z )
排错提示
如果配置完成后仍有链接错误,可以在终端执行pkg-config --libs libavcodec libvpx查看当前环境下正确的链接参数,对照补全缺失的依赖库即可。
内容的提问来源于stack exchange,提问作者Santosh Pandey
相关产品推荐
相关产品推荐

