arm linux AndroidABI gcc无法为android armeabi设备创建可执行编译ffmpeg

arm linux AndroidABI gcc无法为android armeabi设备创建可执行编译ffmpeg,android,gcc,ffmpeg,arm,ubuntu-11.10,Android,Gcc,Ffmpeg,Arm,Ubuntu 11.10,我正在尝试为android armeabi设备编译ffmpeg 我正在学习的教程 他给出的构建脚本为armv7-a设备构建ffmpeg。我想为armeabi建造它 我的最终目标是在安卓armeabi和armv7-a设备上运行ffmpeg命令。 因此,我将脚本的CPU部分从 #arm v7vfpv3 CPU=armv7-a OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU " PREFIX=./android

我正在尝试为android armeabi设备编译ffmpeg
我正在学习
的教程 他给出的构建脚本为armv7-a设备构建ffmpeg。我想为armeabi建造它

我的最终目标是在安卓armeabi和armv7-a设备上运行ffmpeg命令。

因此,我将脚本的CPU部分从

#arm v7vfpv3
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one 

(我认为将其更改为armv6将构建与armeabi设备兼容的ffmpeg。我错了吗?)

疑问1:
我是否也必须更改工具链?
i、 e从arm-linux-AndroidABI-4.4.3到arm-eabi-4.4.0

疑问2:

当我尝试运行./build.sh(不更改工具链)时,它会给我以下错误:

/home/chaitanya/android/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc is unable to create an executable file.
C compiler test failed.

If you think configure made a mistake,.. blaah blahh blaah
在那之后,我收到了很多警告,说:
“sub_id”已弃用,许多其他函数已弃用警告

平台:ubuntu 11.10
ffmpeg版本:0.11.2
NDK:android-NDK-r5b

以下是我的构建脚本:

#!/bin/bash
######################################################
# Usage:
# put this script in top of FFmpeg source tree
# ./build_android
# It generates binary for following architectures:
# ARMv6 
# ARMv6+VFP 
# ARMv7+VFPv3-d16 (Tegra2) 
# ARMv7+Neon (Cortex-A8)
# Customizing:
# 1. Feel free to change ./configure parameters for more features
# 2. To adapt other ARM variants
# set $CPU and $OPTIMIZE_CFLAGS 
# call build_one
######################################################
NDK=~/android/android-ndk-r5b
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
function build_one
{
./configure --target-os=linux \
    --prefix=$PREFIX \
    --enable-cross-compile \
    --extra-libs="-lgcc" \
    --arch=arm \
    #--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
    #--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
    --sysroot=$PLATFORM \
    --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
    --disable-shared \
    --enable-static \
    --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \
    --disable-everything \
    --enable-demuxer=mov \
    --enable-demuxer=h264 \
    --disable-ffplay \
    --enable-protocol=file \
    --enable-avformat \
    --enable-avcodec \
    --enable-decoder=rawvideo \
    --enable-decoder=mjpeg \
    --enable-decoder=h263 \
    --enable-decoder=mpeg4 \
    --enable-decoder=h264 \
    --enable-parser=h264 \
    --disable-network \
    --enable-zlib \
    --disable-avfilter \
    --disable-avdevice \
    $ADDITIONAL_CONFIGURE_FLAG

make clean
make  -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib  -soname libffmpeg.so -shared -nostdlib  -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog  --warn-once  --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
}

#arm v6
CPU=armv6
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=./android/$CPU 
ADDITIONAL_CONFIGURE_FLAG=
build_one

#arm v7vfpv3
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=
#build_one

#arm v7vfp
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
#PREFIX=./android/$CPU-vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one

#arm v7n
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
#PREFIX=./android/$CPU 
#ADDITIONAL_CONFIGURE_FLAG=--enable-neon
#build_one

#arm v6+vfp
#CPU=armv6
#OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
#PREFIX=./android/${CPU}_vfp 
#ADDITIONAL_CONFIGURE_FLAG=
#build_one

我如何解决这个问题?出了什么问题?

我不确定这是否是您正在寻找的,但我创建了一个脚本,以便为Android构建FFmpeg 0.11.1。我修改了旧版本的Bambuser FFmpeg提供的脚本,以便让它们使用0.11.1。我目前正在使用这个脚本在我自己的应用程序中构建FFmpeg,因此我知道构建工作正常。脚本位于。我正在使用android-ndk-r8b和Ubuntu 12.04(x64)进行构建。要使用脚本,请执行以下操作:

1.)下载脚本
2.)打开脚本并修改包变量以匹配应用程序的包
3.)使其可执行:chmod+x build ffmpeg.sh
4.)设置脚本使用的NDK变量,例如:export NDK=/home/user/android-NDK-r8b
5.)运行脚本:./build ffmpeg.sh

编译后的二进制文件将位于当前工作目录中新创建的“最终版本”文件夹中。(注意:该脚本为armeabi、armeabi-v7a和x86体系结构构建二进制文件)

我希望这能回答你的问题

更新:

如果找不到脚本,

在尝试使用r8d ndk版本和r8b构建ffmpeg时,我遇到了类似的错误(C编译器测试失败)

我后来发现的问题是,最新ubuntu上的“Extract here”选项似乎有一些bug。它不能提取所有内容。因此,正确使用“tar-jxf”提取,您将在bin文件夹中看到更多可执行文件

你可以查一下以供参考。

当我面对同样的问题时,我终于发现我的设置存在问题。。。看着arm-build.sh脚本,我开始遵循脚本。请注意“TOOLCHAIN=…”路径

最初的路径是: TOOLCHAIN=
echo$NDK/toolschains/arm-linux-androideabi-4.6/prebuild/*-x86

当我去验证此路径是否存在时,我注意到它不存在。 我想原因是我有一个64位的构建

我的路径实际上是: …/toolschains/arm-linux-androideabi-4.6/prebuild/linux-x86_64

我最后做的是复制文件夹,并将其重命名为“linux-x86”,现在一切都在编译中


希望这对别人有帮助

在我的例子中,我试图构建exoplayer的ffmpeg扩展。它无法使用当前版本的NDK构建(gcc在NDK18B中被删除),所以您必须恢复到NDK15C


请看这里:

我尝试了这个,但仍然得到“arm linux AndroidABI gcc无法创建可执行文件”我正在运行Ubuntu 12.10 64位ffmpeg-1.0,并使用上面的脚本。请帮助我,我使用的是12.04(64位)和NDK版本r8b。当您使用不同的NDK版本时,通常会发生此错误。如果不是这样,请回复,我会尽力帮你解决这个问题。对不起,Vikas,这些脚本只适用于Linux。在Windows下编译是另一场我可能不会继续进行的战斗。我设法获得了“最终版本”文件夹,其中有三个文件夹,分别是armeabi、armeabi-v7a和x86。在armeabi-v7a和armeabi文件夹中,还有其他可用文件夹。但是在x86内部,只有configuration.txt和info.txt文件可用,我有一种不好的感觉,我做错了什么。对于arm v7来说,这不是问题,arm v8和x84_64呢?我的是Mac OS X上的/darwin-x86_64
#!/bin/bash
######################################################
# Usage:
# put this script in top of FFmpeg source tree
# ./build_android
# It generates binary for following architectures:
# ARMv6 
# ARMv6+VFP 
# ARMv7+VFPv3-d16 (Tegra2) 
# ARMv7+Neon (Cortex-A8)
# Customizing:
# 1. Feel free to change ./configure parameters for more features
# 2. To adapt other ARM variants
# set $CPU and $OPTIMIZE_CFLAGS 
# call build_one
######################################################
NDK=~/android/android-ndk-r5b
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
function build_one
{
./configure --target-os=linux \
    --prefix=$PREFIX \
    --enable-cross-compile \
    --extra-libs="-lgcc" \
    --arch=arm \
    #--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
    #--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
    --sysroot=$PLATFORM \
    --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
    --disable-shared \
    --enable-static \
    --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \
    --disable-everything \
    --enable-demuxer=mov \
    --enable-demuxer=h264 \
    --disable-ffplay \
    --enable-protocol=file \
    --enable-avformat \
    --enable-avcodec \
    --enable-decoder=rawvideo \
    --enable-decoder=mjpeg \
    --enable-decoder=h263 \
    --enable-decoder=mpeg4 \
    --enable-decoder=h264 \
    --enable-parser=h264 \
    --disable-network \
    --enable-zlib \
    --disable-avfilter \
    --disable-avdevice \
    $ADDITIONAL_CONFIGURE_FLAG

make clean
make  -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib  -soname libffmpeg.so -shared -nostdlib  -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog  --warn-once  --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
}

#arm v6
CPU=armv6
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=./android/$CPU 
ADDITIONAL_CONFIGURE_FLAG=
build_one

#arm v7vfpv3
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=
#build_one

#arm v7vfp
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
#PREFIX=./android/$CPU-vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one

#arm v7n
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
#PREFIX=./android/$CPU 
#ADDITIONAL_CONFIGURE_FLAG=--enable-neon
#build_one

#arm v6+vfp
#CPU=armv6
#OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
#PREFIX=./android/${CPU}_vfp 
#ADDITIONAL_CONFIGURE_FLAG=
#build_one