这是我在超级用户上提出的第一个问题,所以如果出现问题,请耐心等待我的无知。我花了很多时间试图弄清楚这个问题,非常感谢您的帮助。
我最近安装了 ffmpeg,它附带了许多我需要的库,但缺少 libvpx。之后,我将 libvpx.tar.bz2 安装在与其他库相同的目录中,然后运行 untar。然后,我在 ffmpeg 目录中的命令行中执行了以下命令:
./configure --enable-libvpx
它似乎没有返回任何错误,但它列出了外部库、启用的解码器、启用的编码器等,底部显示:
Creating config.mak, config.h, and doc/config.texi...
config.h is unchanged
config.asm is unchanged
libavutil/avconfig.h is unchanged
但是当我跑步时:
ffmpeg -codecs
它返回:
configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libopencore-amrnb --enable-decoder=liba52 --enable-libopencore-amrwb --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-version3 --extra-version=syslint
其中不包含 --enable-libvpx。我遗漏了什么吗?如何启用 libvpx?
我正在运行 CentOS 6.6。感谢您的帮助!
答案1
首先检查 libvpx 是否实际上启用。我的猜测是没有:
$ grep LIBVPX config.h
#define CONFIG_LIBVPX 1
#define CONFIG_LIBVPX_VP8_DECODER 1
#define CONFIG_LIBVPX_VP9_DECODER 1
#define CONFIG_LIBVPX_VP8_ENCODER 1
#define CONFIG_LIBVPX_VP9_ENCODER 1
假设这显示 0(含义:禁用),通过在 config.log 中搜索“-lvpx”来找出原因:
check_pkg_config vpx >= 0.9.1 vpx/vpx_decoder.h vpx/vp8dx.h vpx_codec_vp8_dx
pkg-config --exists --print-errors vpx >= 0.9.1
check_func_headers vpx/vpx_decoder.h vpx/vp8dx.h vpx_codec_vp8_dx -I/opt/local/include -L/opt/local/lib -lvpx -lm
check_ld cc -I/opt/local/include -L/opt/local/lib -lvpx -lm
check_cc -I/opt/local/include -L/opt/local/lib
BEGIN /var/folders/fz/vjyfg5z12vj759mhd1t27r_m0000gn/T//ffconf.m3VTrQlx.c
1 #include <vpx/vpx_decoder.h>
2 #include <vpx/vp8dx.h>
3 long check_vpx_codec_vp8_dx(void) { 返回 (long) vpx_codec_vp8_dx; }
4 int main(void) { 返回 0; }
结束 /var/folders/fz/vjyfg5z12vj759mhd1t27r_m0000gn/T//ffconf.m3VTrQlx.c
gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -I/Users/ronaldbultje/Projects/libvpx -I/opt/local/include -std=c99 -fomit-frame-pointer -fPIC -pthread -I/opt/local/include -L/opt/local/lib -c -o /var/folders/fz/vjyfg5z12vj759mhd1t27r_m0000gn/T//ffconf.9gSJKIir.o /var/folders/fz/vjyfg5z12vj759mhd1t27r_m0000gn/T//ffconf.m3VTrQlx.c
clang:警告:编译期间未使用的参数:'-L /opt/local/lib'
gcc -L/Users/ronaldbultje/Projects/libvpx/x86-64 -L/opt/local/lib -Wl,-dynamic,-search_paths_first -I/opt/local/include -L/opt/local/lib -o /var/folders/fz/vjyfg5z12vj759mhd1t27r_m0000gn/T//ffconf.kMUmUAaJ /var/folders/fz/vjyfg5z12vj759mhd1t27r_m0000gn/T//ffconf.9gSJKIir.o -lvpx -lm -framework CoreGraphics -lm -llzma -lbz2 -lz -pthread
在您的案例中,您可能会看到这些测试失败,例如因为它找不到要链接的头文件或库。这可能是由于在尝试链接 libvpx 时未使用正确的 cflags/libs 造成的。要解决此问题,请在运行 configure 时使用 --extra-cflags=.. 和 --extra-libs=..。例如,当您将 libvpx 头文件放在 /path/to/libvpx/include 中并将库放在 /path/to/libvpx/libs 中时,请使用:
--extra-cflags='-I /path/to/libvpx/include' --extra-libs='-L /path/to/libvpx/libs'
作为附加配置选项(即除 --enable-libvpx 之外)。然后,它应该可以工作。或者,将 libvpx 标头移动到 /usr/include 并将 libvpx 库移动到 /usr/lib,然后它会自动找到它们。(在典型的 Linux 发行版中,这是默认包管理器放置这些文件的位置。)