ffmpeg 的交叉编译:libvpx 解码器版本必须 >=0.9.1
Posted
技术标签:
【中文标题】ffmpeg 的交叉编译:libvpx 解码器版本必须 >=0.9.1【英文标题】:Cross-compiling for ffmpeg : libvpx decoder version must be >=0.9.1 【发布时间】:2016-08-25 00:54:00 【问题描述】:(注意:我知道标题与this question 几乎相同,但它的解决方案仅适用于我在自己的系统上构建。我正在为嵌入式 ARM 设备构建。)
我正在尝试构建一个针对 arm 设备的交叉编译 FFmpeg 库,而 ./configure 命令告诉我 libvpx 已过时。
我的libvpx版本如下:
$ pkg-config --modversion vorbis
1.3.2
当我运行 ./configure 时
$ ./configure --prefix=/home/test/Dev/build-arm/ffmpeg-armhf/ --enable-cross-compile --cross-prefix=$CCPREFIX --arch=armhf --target-os=linux --pkg-config-flags="--libs vpx --static --cflags" --enable-shared --enable-libvpx
ERROR: libvpx decoder version must be >=0.9.1
If you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "config.log" produced by configure as this will help
solve the problem.
我的 vpx.pc 文件位于/usr/share/pkgconfig
。因为它是针对不同的目标(手臂),我应该把这个文件放在其他地方吗? :
# pkg-config file from libvpx v1.6.0-322-gc325fb7
prefix=/home/test/Dev/build-arm/libvpx
exec_prefix=$prefix
libdir=$prefix/lib
includedir=$prefix/include
Name: vpx
Description: WebM Project VPx codec implementation
Version: 1.6.0
Requires:
Conflicts:
Libs: -L$libdir -lvpx -lm
Libs.private: -lm -lpthread
Cflags: -I$includedir
在我的 config.log 中,我看到了这个:
(...lots of text...)
arm-openwrt-linux-gnueabi-gcc -Werror=missing-prototypes -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -march=armv7-a -std=c99 -fomit-frame-pointer -marm -fPIC -pthread -c -o /tmp/ffconf.cZcBLWc3.o /tmp/ffconf.sWjTIULb.m
arm-openwrt-linux-gnueabi-gcc: /tmp/ffconf.sWjTIULb.m: Objective-C compiler not installed on this system
check_pkg_config vpx >= 0.9.1 vpx/vpx_decoder.h vpx/vp8dx.h vpx_codec_vp8_dx
false --exists --print-errors vpx >= 0.9.1
check_lib2 vpx/vpx_decoder.h vpx/vp8dx.h vpx_codec_dec_init_ver -lvpx
check_func_headers vpx/vpx_decoder.h vpx/vp8dx.h vpx_codec_dec_init_ver -lvpx
check_ld cc -lvpx
check_cc
BEGIN /tmp/ffconf.gM9G9FSQ.c
1 #include <vpx/vpx_decoder.h>
2 #include <vpx/vp8dx.h>
3 long check_vpx_codec_dec_init_ver(void) return (long) vpx_codec_dec_init_ver;
4 int main(void) return 0;
END /tmp/ffconf.gM9G9FSQ.c
arm-openwrt-linux-gnueabi-gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -march=armv7-a -std=c99 -fomit-frame-pointer -marm -fPIC -pthread -c -o /tmp/ffconf.cZcBLWc3.o /tmp/ffconf.gM9G9FSQ.c
/tmp/ffconf.gM9G9FSQ.c:1:29: fatal error: vpx/vpx_decoder.h: No such file or directory
compilation terminated.
ERROR: libvpx decoder version must be >=0.9.1
看起来编译器没有提供包含和库路径,但我不知道应该如何解决这个问题。 如果您能提供一些指导,我将不胜感激。
【问题讨论】:
...我猜这是个死胡同? 【参考方案1】:找到了。
我的图书馆位于
/home/test/Dev/build-arm/libvpx/lib
但是查询 pkg-config 给出了
$ arm-openwrt-linux-gnueabi-pkg-config --libs vpx
-L/home/test/Dev/build-arm/home/test/Dev/build-arm/libvpx/lib -lvpx
原来我的 arm-openwrt-linux-gnueabi-pkg-config 脚本是错误的。
#!/bin/sh
SYSROOT=/home/test/Dev/build-arm
export PKG_CONFIG_LIBDIR=$SYSROOT/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=$SYSROOT
exec pkg-config "$@"
这是正确的版本,现在可以使用。
#!/bin/sh
SYSROOT=/home/test/Dev/build-arm
export PKG_CONFIG_LIBDIR=$SYSROOT/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=
exec pkg-config "$@"
感谢轻松和furq(#ffmpeg irc.freenode.net)的帮助
【讨论】:
以上是关于ffmpeg 的交叉编译:libvpx 解码器版本必须 >=0.9.1的主要内容,如果未能解决你的问题,请参考以下文章
mips uclibc 交叉编译ffmpeg,支持 G711A 编解码
mips uclibc 交叉编译ffmpeg,支持 G711A 编解码
基于Ubuntu交叉编译FFmpeg Windows SDK