我想在我的程序中使用 ffmpeg 库。它们是 libavformat 和 libavcodec。为了链接它们,我正在尝试使用 pkg-config。
我无法让 pkg-config 找到这些库。
当我跑步时
pkg-config --modversion libavcodec
我明白了
Can't find libavcodec.pc in any of C:/Strawberry/c/lib/pkgconfig
这应该意味着我没有安装 ffmpeg。
但是,我确实安装了ffmpeg。 我使用的是 Windows,因此我使用 Chocolatey 包管理器安装了 ffmpeg。这似乎只给了我 ffmpeg 程序,而不是它的库。
在 MacOS 上,只需使用 homebrew 安装 ffmpeg 即可安装所有正确的文件。
Windows 上有区别吗?如何获取开发包?
更多信息:
我使用 CMake-js 作为节点插件来编译它。这是我的 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?
-- 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
对于有同样问题的人:
我查看了 linux 和 macos 软件包的文件夹结构,它们包含所有库。主下载或任何包管理器中包含的 Windows 版本不包含这些库。
如果您使用的是 Windows,您将需要从 here(BtbN FFmpeg Builds)进行构建并获取完整版本。
现在我要做的就是让它与 pkg-config 一起工作。
Cmake 会查找那些
*.pc
文件,例如 libavcodec.pc
中的 C:/Strawberry/c/lib/pkgconfig/
。在 cmake
参数中构建任何这些库时,您需要在任何 **PKG_CONFIG_PATH**
或任何自动配置命令到 pkg_check_modules
变量中指定此路径。
你可以这样做:
PKG_CONFIG_PATH=C:/Strawberry/c/lib/pkgconfig cmake ..