如何安装FFmpeg使pkg-config能识别其开发库?
问题:Windows下通过pkg-config链接FFmpeg开发库失败
我想在程序中使用FFmpeg的libavformat、libavcodec等库,尝试用pkg-config链接,但pkg-config找不到这些库。执行pkg-config --modversion libavcodec时,返回:
Can't find libavcodec.pc in any of C:/Strawberry/c/lib/pkgconfig
我已经用Chocolatey在Windows上装了FFmpeg,但看起来只装了FFmpeg程序,没包含开发库。而MacOS上用Homebrew装FFmpeg会自动带所需的开发文件。
想问:Windows平台是不是有差异?怎么获取FFmpeg的开发包?
补充信息
我正在用CMake-js编译Node插件,我的CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 3.9) project(FFMpeg) find_package(PkgConfig REQUIRED) pkg_check_modules(AVCODEC REQUIRED IMPORTED_TARGET libavcodec) pkg_check_modules(AVFILTER REQUIRED IMPORTED_TARGET libavformat) pkg_check_modules(AVDEVICE REQUIRED IMPORTED_TARGET libavdevice) pkg_check_modules(AVUTIL REQUIRED IMPORTED_TARGET libavutil) pkg_check_modules(SWRESAMPLE REQUIRED IMPORTED_TARGET libswresample) pkg_check_modules(SWSCALE REQUIRED IMPORTED_TARGET libswscale) add_library(FFMpeg INTERFACE IMPORTED GLOBAL) target_include_directories( FFmpeg INTERFACE ${AVCODEC_INCLUDE_DIRS} ${AVFILTER_INCLUDE_DIRS} ${AVDEVICE_INCLUDE_DIRS} ${AVUTIL_INCLUDE_DIRS} ${SWRESAMPLE_INCLUDE_DIRS} ${SWSCALE_INCLUDE_DIRS} ) target_link_options( FFmpeg INTERFACE ${AVCODEC_LDFLAGS} ${AVFILTER_LDFLAGS} ${AVDEVICE_LDFLAGS} ${AVUTIL_LDFLAGS} ${SWRESAMPLE_LDFLAGS} ${SWSCALE_LDFLAGS} )
编译输出显示pkg-config路径为C:/Strawberry/perl/bin/pkg-config.bat,内容如下:
-- Found PkgConfig: C:/Strawberry/perl/bin/pkg-config.bat (found version "0.26") -- Checking for module 'libavcodec' -- Can't find libavcodec.pc in any of C:/Strawberry/c/lib/pkgconfig
解决方案
Windows与MacOS的差异
是的,Windows平台的FFmpeg分发确实和MacOS存在差异:
- Homebrew的FFmpeg包默认包含开发文件(头文件、
.pc配置文件、静态/动态库),因为Homebrew更偏向开发者使用场景。 - Chocolatey的默认FFmpeg包仅提供运行时程序,不包含开发所需的头文件和库文件,这是为了满足普通用户快速使用FFmpeg命令行工具的需求设计的。
获取Windows下FFmpeg开发包的方法
方法1:安装带开发库的Chocolatey包
Chocolatey提供了包含开发文件的FFmpeg包,执行以下命令安装:
choco install ffmpeg-full --package-parameters="/dev"
该包会完整包含头文件、.pc文件和库文件,安装后需确保PKG_CONFIG_PATH环境变量包含FFmpeg开发文件的pkgconfig目录(默认路径通常类似C:\ProgramData\chocolatey\lib\ffmpeg-full\tools\ffmpeg\lib\pkgconfig),pkg-config就能自动识别到库。
方法2:手动下载预编译开发包
从FFmpeg官方认可的预编译渠道下载带开发库的版本:
- 选择对应架构(x86/x64)的dev包(文件名通常带有
dev标识)。 - 解压后,将包含
.pc文件的pkgconfig目录路径添加到系统环境变量PKG_CONFIG_PATH中。 - 同时确保头文件所在的
include目录和库文件所在的lib目录能被CMake或pkg-config识别。
方法3:自行编译FFmpeg
如果需要定制FFmpeg功能,可以自行编译:
- 下载FFmpeg源码,使用MSYS2或MinGW环境配置编译依赖。
- 编译时添加
--enable-shared(生成动态库)和--enable-pkg-config(生成.pc文件)参数。 - 编译完成后,将生成的
.pc目录路径添加到PKG_CONFIG_PATH环境变量中。
额外注意事项
- 你的CMakeLists.txt存在一处错误:
pkg_check_modules(AVFILTER REQUIRED IMPORTED_TARGET libavformat)中,目标库应该是libavfilter而非libavformat,修正后才能正确找到avfilter库。 - 确保pkg-config的架构与FFmpeg开发包匹配(比如x64的pkg-config对应x64的FFmpeg开发库),避免因架构不匹配导致找不到库。
内容的提问来源于stack exchange,提问作者Project PowerPoint
相关产品推荐
相关产品推荐

