【问题标题】:Compiling FFmpeg : libx264 not found编译 FFmpeg:找不到 libx264
【发布时间】:2016-06-27 21:18:20
【问题描述】:

我希望有人能帮助我解决这个问题。我试图按照本教程使用 android ndk r10e 在 ubuntu 12.04LTS 下为 android 编译 FFmpeg 2.2.3 库:

Tutorial1

Tutorial2

这是我的 build_android.sh 文件:

#!/bin/bash
NDK=/home/rango/Desktop/android-ndk-r10e
SYSROOT=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86

#ADDI_LDFLAGS="-L /usr/local/lib"
#ADDI_CFLAGS="-I /usr/include"

function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-protocol=concat \
--enable-protocol=file \
--enable-muxer=mp4 \
--enable-demuxer=mpegts \
--enable-memalign-hack \
--enable-gpl \
--enable-libx264 \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic -marm $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \

make clean
make -j4
make install
}

CPU=arm
PREFIX=$(pwd)/android/$CPU

build_one

当我在没有 --enable-libx264 \ 行的情况下执行 buid_android.sh 脚本时,一切正常,我可以在 android/arm/ 文件夹中获取 .a 文件。但这一行失败并在控制台中显示以下错误:

错误:找不到 libx264

如果您认为 configure 出错了,请确保您使用的是 来自 Git 的最新版本。如果最新版本失败,请报告 ffmpeg-user@ffmpeg.org 邮件列表或 IRC #ffmpeg 上的问题 irc.freenode.net。包括由生成的日志文件“config.log” 配置,因为这会有所帮助

似乎找不到库在哪里,因为我在 config.log 文件中收到很多以下错误:

"LIBNAME".h: 没有这样的文件或目录 newlib.h:没有这样的文件或 目录mingw.h:没有这样的文件或目录 x264.h:没有这样的文件或 目录

这里是 config.log 文件的尾部:

check_mathfunc truncf 1
check_ld cc
check_cc
BEGIN /tmp/ffconf.zGKqGin6.c
    1   #include <math.h>
    2   float foo(float f, float g) { return truncf(f); }
    3   int main(void){ return (int) foo; }
END /tmp/ffconf.zGKqGin6.c
/home/rango/Desktop/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/home/rango/Desktop/android-ndk-r10e/platforms/android-19/arch-arm/ -isysroot /home/rango/Desktop/android-ndk-r10e/platforms/android-19/arch-arm/ -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Dstrtod=avpriv_strtod -DPIC -Os -fpic -marm -march=armv5te -std=c99 -fomit-frame-pointer -fPIC -marm -pthread -c -o /tmp/ffconf.8Q9ke3aO.o /tmp/ffconf.zGKqGin6.c
/home/rango/Desktop/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/home/rango/Desktop/android-ndk-r10e/platforms/android-19/arch-arm/ -isysroot /home/rango/Desktop/android-ndk-r10e/platforms/android-19/arch-arm/ -Wl,--as-needed -o /tmp/ffconf.3sjTkc5z /tmp/ffconf.8Q9ke3aO.o -lm -lz -pthread
check_lib x264.h x264_encoder_encode -lx264
check_header x264.h
check_cpp
BEGIN /tmp/ffconf.zGKqGin6.c
    1   #include <x264.h>
    2   int x;
END /tmp/ffconf.zGKqGin6.c
/home/rango/Desktop/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=/home/rango/Desktop/android-ndk-r10e/platforms/android-19/arch-arm/ -isysroot /home/rango/Desktop/android-ndk-r10e/platforms/android-19/arch-arm/ -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Dstrtod=avpriv_strtod -DPIC -Os -fpic -marm -march=armv5te -std=c99 -fomit-frame-pointer -fPIC -marm -pthread -E -o /tmp/ffconf.8Q9ke3aO.o /tmp/ffconf.zGKqGin6.c
/tmp/ffconf.zGKqGin6.c:1:18: fatal error: x264.h: No such file or directory
 #include <x264.h>
                  ^
compilation terminated.
ERROR: libx264 not found

【问题讨论】:

    标签: android ffmpeg android-ndk libx264


    【解决方案1】:

    理论上,要为 Android 构建 FFmpeg 并支持 libx264,您需要完成以下步骤:

    1) 为 Android 构建 libx264。现在你还没有构建任何 libx264,这就是你得到上述错误的原因。

    2) 更改您的 buid_android.sh 并向 configure 添加其他选项(--extra-cflags--extra-ldflags)以指定到 includelib 的路径libx264 的目录,它是在步骤 1 上构建的。

    3) 运行修改后的build_android.sh

    很遗憾,我还没有为Android 构建libx264。但我认为有办法做到这一点......

    【讨论】:

    • 感谢您的回答。我已经解决了问题是我应该使用android交叉编译器而不是系统之一为android编译libx264。我现在编译它并且它的工作。我将发布一个完整的答案,我所做的每一步都会让它尽快工作
    【解决方案2】:

    好的,这就是我为正确编译所做的。正如 Edgar 提到的,我应该使用 NDK 编译器为 android 编译 libx264 库。 我用这个脚本来完成它。

    #!/bin/bash
    
    NDK=(path to android ndk)/android-ndk-r10e
    SYSROOT=$NDK/platforms/android-19/arch-arm/
    TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86
    
    
    
    ./configure --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --sysroot=$SYSROOT \
    --enable-static \
    --enable-pic \
    --enable-static \
    --disable-cli \
    --disable-asm \
    --extra-cflags="-fPIE -pie" \
    --extra-ldflags="-fPIE -pie" \
    --host=arm-linux
    
    make
    sudo make install
    sudo ldconfig
    

    【讨论】:

    • 你为什么要--disable-asm
    • 我其实不知道为什么会有这个选项,我只是把它复制到别的地方。
    • 禁用 ASM 会使编码变慢。
    • 是的,我注意到编译后编码太慢了。我会尝试用 asm 编译。
    猜你喜欢
    • 2019-09-02
    • 2011-06-11
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2015-07-20
    • 2018-04-04
    • 2014-06-21
    相关资源
    最近更新 更多