arm linux AndroidABI gcc无法为android armeabi设备创建可执行编译ffmpeg
我正在尝试为android armeabi设备编译ffmpegarm 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
我正在学习
的教程 他给出的构建脚本为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