使用 pkg-config 未找到编译 FFMPEG x265

Posted

技术标签:

【中文标题】使用 pkg-config 未找到编译 FFMPEG x265【英文标题】:Compiling FFMPEG x265 not found using pkg-config 【发布时间】:2019-01-25 20:31:34 【问题描述】:

我正在尝试在 Win10 上使用 x265 编译 FFMPEG。我正在使用来自 xhmikosr 的最新完整 MinGW 版本:

http://xhmikosr.1f0.de/tools/msys/

没有 x265 的 FFMEPG 编译没有问题,编译 x265 独立也没有问题。 但是,当我在 ffmpeg 中使用 --enable-libx265 时,出现以下错误:

ERROR: x265 not found using pkg-config

这来自 config.log:

require_pkg_config libx265 x265 x265.h x265_api_get
check_pkg_config libx265 x265 x265.h x265_api_get
test_pkg_config libx265 x265 x265.h x265_api_get
false --exists --print-errors x265
ERROR: x265 not found using pkg-config

我的配置路径似乎都设置正确。

$ echo $PKG_CONFIG_PATH
C:\MYSYS\local\x86_64-w64-mingw32\lib\pkgconfig

当我寻找 x265 库时:

$ pkg-config --list-all
...
x265          x265 - H.265/HEVC video encoder
...

这里是调试日志:

$ pkg-config --debug
...
File 'x265.pc' appears to be a .pc file
Will find package 'x265' in file 'C:/MYSYS/local/x86_64-w64-mingw32/lib/pkgconfig\x265.pc'
...

为什么我尝试编译时 pkg-config 仍然找不到 x265 库?

【问题讨论】:

您找到解决方案了吗?我有同样的问题。 x265 出现在 pkg-config --list-all 中,但在构建期间提供 x265 not found using pkg-config 不,从来没有。我不再安装 MinGW。它必须与交叉编译器如何调用库有关。我确实记得如果 x265 混合使用,x265 甚至会导致编译其他 FFMPEG 库出现问题。但我真的对此知之甚少。 在 MinGW/msys2 上有同样的问题。将 x265 构建为共享库并将 libx265.lib 重命名为 x265.lib 似乎已经为我解决了这个问题(知道 pkg-config 实际上可以看到它)。 【参考方案1】:

x265.pc 有时不位于“/usr/local/lib/pkgconfig”,而是位于“/usr/lib/arm-linux-gnueabihf/pkgconfig/”,因此,您需要包含它也在导出中。

export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig/:/usr/local/lib/pkgconfig/

【讨论】:

在您发布答案近一年后,我发现它试图解决一些与此线程没有太大关系的类似问题,但您的回答解决了我的问题,非常感谢!跨度> 非常感谢。这个答案帮助我解决了这个问题。就我而言(使用 x265 安装 ffmpeg),所有其他软件包配置都在“$HOME/ffmpeg_build/lib/pkgconfig”中,但 x265 在“/usr/local/lib/pkgconfig/”中,所以我不得不稍微导出更改如:PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig:/usr/local/lib/pkgconfig"【参考方案2】:

解决方案: 添加--extra-libs=-lpthreadhttps://bitbucket.org/multicoreware/x265/issues/371/x265-not-found-using-pkg-config

【讨论】:

是的,这在我的情况下也起到了作用。当我将 ffmpeg 从 3.4.1 更新到 4.3.1 时出现问题。这里是解决方案github.com/ilyaevseev/ffmpeg-build/issues/2 当我在我的 ffmpeg 构建中添加对 x265 的支持时,这对我有用。我继续并在那里添加了-lm,因为这是现在ffmpeg编译文档的一部分--extra-libs="-lpthread -lm"参考:trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu【参考方案3】:

根据我的经验,我在 CentOS 中使用 x265 配置 ffmpeg,它也收到错误消息

ERROR: x265 not found using pkg-config

在我尝试这个之后:

$ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"

我用 x264 成功配置和编译了 ffmpeg。你可以试试这个。

【讨论】:

【参考方案4】:

它需要更多的库。请安装“libnuma”。

【讨论】:

【参考方案5】:

我跟随wiki x265指导

git clone https://bitbucket.org/multicoreware/x265_git
cd x265_git/build/linux
./make-Makefiles.bash
make

在 Red Hat Enterprise Linux 8 中运行良好

【讨论】:

此 repo 不再可用。但是一旦我在终端上点击它,他们就会问我一个用户名和密码 改用git clone https://bitbucket.org/multicoreware/x265_git x265【参考方案6】:

经过多次尝试和错误,我相信我在 Ubuntu 16.04 下找到了解决方案和根本原因。此解决方案也可能适用于 Ubuntu 的其他变体。


如果您遇到此线程中描述的包配置错误,请先尝试安装默认(基于存储库)库,然后使用您的 ffmpeg 构建脚本安装您的自定义版本。

根据需要运行您的自定义脚本以从源代码编译 ffmpeg 和您的依赖库(例如 x265)之前运行这些命令:

apt install -y libx265-dev

如果另一个库失败,请尝试相同的技术,然后再次运行您的脚本以查看它是否有效。例如,有些人报告从源代码编译 ffmpeg 抱怨 gnutls。 Ubuntu 16.04 的解决方案是先通过 apt 安装它,然后运行你的脚本。

apt install -y gnutls-dev

如果您正忙于编译 x264 库(为了支持 H.264),只需在运行脚本之前运行它:

apt install -y libx264-dev

只要您的新脚本覆盖旧文件并且不清除它们,此方法就可以工作。

背景/历史

问题的根源至少可以追溯到 2017 年,尽管有很多人声称它似乎并没有真正得到解决。人们可以在各种论坛和网站上找到关于无论 ffmpeg 构建版本如何都无法让其编译正常工作的沮丧用户的参考资料,例如 here。

这是一个难以解决的问题,部分原因是用于安装 x265 库支持的 VLC Developer 说明已损坏。此外,由于今年早些时候BitBucket's decision to sunset Mercurial support,解释此问题以及如何解决它的信息存档不再可用。大多数解释问题以及如何解决问题的存档论坛帖子都消失了。在 GitHub 上仍有一些线索可以找到,但它们是关于该主题的不完整的 sn-ps 信息;没有一个提供完整的视角。

从头开始安装 ffmpeg 肯定会让几乎所有人都头疼。我在网上找到的所有脚本(几十个)都没有按照描述正常工作。他们的大多数问题是不正确/过时的链接。带有 GitHub 链接的解决方案似乎是最可靠的。其他应避免(例如hg,如上所述不再支持)。

【讨论】:

【参考方案7】:

你可以试试

--pkg-config="pkg-config --static"

【讨论】:

【参考方案8】:

我相信我找到了解决方案。问题似乎是当前指南是从master(这可能是开发人员想要的)中提取的,但在我的情况下 我实际上需要stable。而不是使用当前指南中提供的命令:

sudo apt-get install libnuma-dev && \
cd ~/ffmpeg_sources && \
git -C x265_git pull 2> /dev/null || git clone --depth 1 https://bitbucket.org/multicoreware/x265_git && \
cd x265_git/build/linux && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && \
PATH="$HOME/bin:$PATH" make && \
make install

使用这个命令:

sudo apt-get install libnuma-dev && \
cd ~/ffmpeg_sources && \
git -C x265_git pull 2> /dev/null || git clone --depth 1 https://bitbucket.org/multicoreware/x265_git -b stable && \
cd x265_git/build/linux && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && \
PATH="$HOME/bin:$PATH" make && \
make install

【讨论】:

试过了,还是不行。在这里提出了一个问题:bitbucket.org/multicoreware/x265_git/issues/edit/7 这可能是因为看起来“稳定”现在已经坏了:) @slhck。用下载或克隆早期标签替换 git 东西。我用过:wget http://ftp.videolan.org/pub/videolan/x265/x265_3.2.1.tar.gz && tar zxf x265_3.2.1.tar.gz && cd x265_3.2.1/build/linux 似乎解决方案是同时获取 Git 标签,而不仅仅是做一个浅克隆:bitbucket.org/multicoreware/x265_git/issues/572/…

以上是关于使用 pkg-config 未找到编译 FFMPEG x265的主要内容,如果未能解决你的问题,请参考以下文章

GLFW 链接,未定义对 init 的引用

linux ubuntu pkg-config工具的使用(源代码编译库接口查询工具)

尝试编译opengl项目时出现c ++未定义的引用错误

Windows 编译 v8 上的 pkg-config 错误

CMake的pkg-config模块使用

未定义对“jack_client_close”等的引用