You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下使用CMake构建FFmpeg依赖项目失败求助

解决CMake找不到FFmpeg库的问题

看起来你遇到的核心问题是pkg-config无法定位FFmpeg的.pc配置文件,同时你的FFmpeg模块CMakeLists里还有几处拼写错误,我们一步步来解决:

一、先修正CMakeLists里的拼写错误

打开lib/FFmpeg/CMakeLists.txt,修改两处明显的笔误:

  1. 把ASWRESAMPLE改成SWRESAMPLE(多打了个字母A)
  2. 把libswrescale改成libswscale(多了个字母c)

修正后的相关代码段:

pkg_check_modules(SWRESAMPLE REQUIRED IMPORTED_TARGET libswresample)
pkg_check_modules(SWSCALE REQUIRED IMPORTED_TARGET libswscale)

二、让pkg-config能找到FFmpeg的.pc文件

CMD里能运行ffmpeg只说明它在系统PATH里,但pkg-config需要找到FFmpeg的.pc配置文件(这些文件记录了库的头文件路径和链接参数)。

步骤1:定位FFmpeg的pkgconfig目录

根据你提供的ffmpeg编译配置--prefix=/ffbuild/prefix,找到FFmpeg实际安装/解压后的目录,里面应该有个pkgconfig文件夹,里面包含libavcodec.pc、libavformat.pc等文件。比如路径可能是C:\ffmpeg\pkgconfig或者你自定义的安装路径。

步骤2:设置PKG_CONFIG_PATH环境变量

在运行CMake之前,先在CMD里设置环境变量,让pkg-config知道去哪里找这些.pc文件:

set PKG_CONFIG_PATH=你的FFmpeg安装目录\pkgconfig

举个例子,如果你的FFmpeg在D:\Programs\ffmpeg,那就是:

set PKG_CONFIG_PATH=D:\Programs\ffmpeg\pkgconfig

设置完成后再进入你的build目录运行cmake ..。

备选:在CMake里直接指定路径

如果你不想每次手动设置环境变量,可以在项目根目录的CMakeLists开头添加:

set(PKG_CONFIG_PATH "你的FFmpeg安装目录/pkgconfig" CACHE PATH "Path to FFmpeg pkgconfig files")

三、如果pkg-config还是不好用,试试直接指定FFmpeg路径(Windows环境更稳定)

有时候Windows下pkg-config的配置容易出问题,你可以跳过pkg-config,直接用CMake原生指令定位FFmpeg:

修改lib/FFmpeg/CMakeLists.txt为:

cmake_minimum_required(VERSION 3.14)
project(FFmpeg)

# 替换成你实际的FFmpeg安装路径
set(FFMPEG_ROOT "你的FFmpeg安装目录" CACHE PATH "FFmpeg root directory")

# 查找头文件
find_path(AVCODEC_INCLUDE_DIR libavcodec/avcodec.h PATHS ${FFMPEG_ROOT}/include)
find_path(AVFORMAT_INCLUDE_DIR libavformat/avformat.h PATHS ${FFMPEG_ROOT}/include)
find_path(AVFILTER_INCLUDE_DIR libavfilter/avfilter.h PATHS ${FFMPEG_ROOT}/include)
find_path(AVDEVICE_INCLUDE_DIR libavdevice/avdevice.h PATHS ${FFMPEG_ROOT}/include)
find_path(AVUTIL_INCLUDE_DIR libavutil/avutil.h PATHS ${FFMPEG_ROOT}/include)
find_path(SWRESAMPLE_INCLUDE_DIR libswresample/swresample.h PATHS ${FFMPEG_ROOT}/include)
find_path(SWSCALE_INCLUDE_DIR libswscale/swscale.h PATHS ${FFMPEG_ROOT}/include)

# 查找库文件
find_library(AVCODEC_LIBRARY avcodec PATHS ${FFMPEG_ROOT}/lib)
find_library(AVFORMAT_LIBRARY avformat PATHS ${FFMPEG_ROOT}/lib)
find_library(AVFILTER_LIBRARY avfilter PATHS ${FFMPEG_ROOT}/lib)
find_library(AVDEVICE_LIBRARY avdevice PATHS ${FFMPEG_ROOT}/lib)
find_library(AVUTIL_LIBRARY avutil PATHS ${FFMPEG_ROOT}/lib)
find_library(SWRESAMPLE_LIBRARY swresample PATHS ${FFMPEG_ROOT}/lib)
find_library(SWSCALE_LIBRARY swscale PATHS ${FFMPEG_ROOT}/lib)

# 验证查找结果
foreach(_DIR AVCODEC_INCLUDE_DIR AVFORMAT_INCLUDE_DIR AVFILTER_INCLUDE_DIR AVDEVICE_INCLUDE_DIR AVUTIL_INCLUDE_DIR SWRESAMPLE_INCLUDE_DIR SWSCALE_INCLUDE_DIR)
    if(NOT ${_DIR})
        message(FATAL_ERROR "Could not find ${_DIR}")
    endif()
endforeach()

foreach(_LIB AVCODEC_LIBRARY AVFORMAT_LIBRARY AVFILTER_LIBRARY AVDEVICE_LIBRARY AVUTIL_LIBRARY SWRESAMPLE_LIBRARY SWSCALE_LIBRARY)
    if(NOT ${_LIB})
        message(FATAL_ERROR "Could not find ${_LIB}")
    endif()
endforeach()

add_library(FFmpeg INTERFACE IMPORTED GLOBAL)
target_include_directories(FFmpeg INTERFACE
    ${AVCODEC_INCLUDE_DIR}
    ${AVFORMAT_INCLUDE_DIR}
    ${AVFILTER_INCLUDE_DIR}
    ${AVDEVICE_INCLUDE_DIR}
    ${AVUTIL_INCLUDE_DIR}
    ${SWRESAMPLE_INCLUDE_DIR}
    ${SWSCALE_INCLUDE_DIR}
)
target_link_libraries(FFmpeg INTERFACE
    ${AVCODEC_LIBRARY}
    ${AVFORMAT_LIBRARY}
    ${AVFILTER_LIBRARY}
    ${AVDEVICE_LIBRARY}
    ${AVUTIL_LIBRARY}
    ${SWRESAMPLE_LIBRARY}
    ${SWSCALE_LIBRARY}
)

替换FFMPEG_ROOT为你实际的FFmpeg安装路径,这种方式不依赖pkg-config,在Windows环境下兼容性更好。

最后验证

修改完成后,删除build目录下的所有文件,重新运行CMake配置,应该就能成功找到FFmpeg的库了。

内容的提问来源于stack exchange,提问作者BloodyFerret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:18:14