Ubuntu 16.04 上的 FFMPEG 编译失败 - 目标“libavcodec/libfdk-aacenc.o”的配方失败

Ubuntu 16.04 上的 FFMPEG 编译失败 - 目标“libavcodec/libfdk-aacenc.o”的配方失败

我已按照记录在https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu,并且我在 Ubuntu 16.04 上成功安装了支持 libfdk_aac 的 FFMPEG。最近,当我想再次设置一个新的编码生态系统时,我遇到了一个错误,如下所示:

CC libavcodec/libfdk-aacdec.o 在从 /home/sn/ffmpeg_build/include/fdk-aac/aacdecoder_lib.h:457:0 包含的文件中,来自 libavcodec/libfdk-aacdec.c:20:

/home/sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:735:30:警告:'FDKinitLibInfo'已定义但未使用 [-Wunused-function] static FDK_AUDIO_INLINE void FDKinitLibInfo(LIB_INFO* info) { ^ /home/sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:745:1:警告:'FDKlibInfo_getCapabilities'已定义但未使用 [-Wunused-function] FDKlibInfo_getCapabilities(const LIB_INFO* info, FDK_MODULE_ID module_id) { ^

/home/sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:757:29:警告:'FDKlibInfo_lookup' 已定义但未使用 [-Wunused-function] static FDK_AUDIO_INLINE INT FDKlibInfo_lookup(const LIB_INFO* info, ^

CC libavcodec/libfdk-aacenc.o libavcodec/libfdk-aacenc.c:在函数“aac_encode_init”中:libavcodec/libfdk-aacenc.c:293:34:错误:“AACENC_InfoStruct {aka struct }”没有名为“encoderDelay”的成员 avctx->initial_padding = info.encoderDelay; ^

在从 /home/sn/ffmpeg_build/include/fdk-aac/aacenc_lib.h:1026:0 包含的文件中,从 libavcodec/libfdk-aacenc.c:20: libavcodec/libfdk-aacenc.c: 在顶层:/home/sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:735:30: 警告:'FDKinitLibInfo' 已定义但未使用 [-Wunused-function] static FDK_AUDIO_INLINE void FDKinitLibInfo(LIB_INFO* info) { ^

/home/sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:745:1: 警告:'FDKlibInfo_getCapabilities' 已定义但未使用 [-Wunused-function] FDKlibInfo_getCapabilities(const LIB_INFO* info, FDK_MODULE_ID module_id) { ^

/home/sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:757:29:警告:'FDKlibInfo_lookup' 已定义但未使用 [-Wunused-function] static FDK_AUDIO_INLINE INT FDKlibInfo_lookup(const LIB_INFO* info, ^ ffbuild/common.mak:60:目标'libavcodec/libfdk-aacenc.o' 的配方失败:*** [libavcodec/libfdk-aacenc.o] 错误 1

似乎 libfdk 或 ffmpeg 存储库的更新导致了此错误。

答案1

经过一番调查,我在 ffmpeg 邮件列表中找到了答案。正如本文中提到的http://www.ffmpeg-archive.org/ffmpeg-compilation-error-on-libfdk-acc-ubuntu16-04-td4685096.html,此错误是由于 libfdk API 更新而引发的。没有可以与此新版本 API 列表匹配的 ffmpeg 版本。

在 ffmpeg 团队更新代码之前,合理的解决方案是降级 libfdk。为此,您可以更改 libfdk 的安装说明 https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu, 如下:

cd ~/ffmpeg_sources && \
git -C fdk-aac pull 2> /dev/null || git clone --depth 11 https://github.com/mstorsjo/fdk-aac && \
cd fdk-aac && \
autoreconf -fiv && \
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
make && \
make install

请注意,我们更改了深度参数并将其设置为 11。这适用于此答案的当前日期。如果将来发布任何新的提交或发布包,您应该增加深度数字以适应您可以使用它编译 ffmpeg 的正确版本。

另一个解决方案反映在https://github.com/mstorsjo/fdk-aac/issues/93以及http://www.ffmpeg-archive.org/ffmpeg-compilation-error-on-libfdk-acc-ubuntu16-04-td4685096.html是关于在源代码上应用补丁。补丁本身可以通过以下方式访问https://github.com/libav/libav/commit/141c960e21d2860e354f9b90df136184dd00a9a8。我们必须手动在文本编辑器中打开源文件,转到路径中显示的行号并添加带有 + 的行并删除带有 - 的行。

相关内容