2012-09-30 67 views
12

Estoy tratando de compilar ffmpeg para dispositivos android armeabi.
Estoy siguiendo el tutorial por roman10.net
Su script de construcción dado construye ffmpeg para dispositivos armv7-a. Quiero construirlo para armeabi.
arm-linux-androideabi-gcc no puede crear un archivo ejecutable - compilar ffmpeg para dispositivos android armeabi

Mi objetivo final es ejecutar comandos ffmpeg en dispositivos android armeabi y armv7-a.

Así que cambiar parte de la CPU de la secuencia de comandos de

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

a

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

(pensé cambiándolo a ARMv6 construiría ffmpeg compatible con dispositivos armeabi. M equivocado?)

Duda 1:
¿También tengo que cambiar la herramienta? ain?
es decir, desde arm-linux-androideabi-4.4.3 a arm-eabi-4.4.0 ?????

Duda 2:

Cuando intento ./build.sh en funcionamiento (sin cambiar herramientas principales) me da error siguiente:

/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 

después de que me dieron muchas advertencias que decían:
'sub_id' está en desuso y muchas otras funciones tienen advertencias obsoletas. plataforma

: ubuntu 11.10
versión de ffmpeg: 0.11.2
NDK: android-NDK-R5b

Aquí está mi escritura de la estructura:

#!/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 

? ¿Cómo Abordo este problema? ¿Qué está pasando mal?

Respuesta

10

No estoy seguro de si esto es lo que estás buscando, pero creé un script para construir FFmpeg 0.11.1 para Android. Modifiqué las secuencias de comandos proporcionadas con versiones anteriores de Bambuser FFmpeg para que funcionen con 0.11.1. Actualmente estoy usando este script para compilar FFmpeg en mi propia aplicación, así sé que la construcción funciona. El script ubicado en http://servestream.sourceforge.net/build-ffmpeg.sh. Estoy usando android-ndk-r8b y Ubuntu 12.04 (x64) para hacer el edificio. Para utilizar la secuencia de comandos, haga lo siguiente:

1.) Descargar el guión
2.) Abra la secuencia de comandos y modificar la variable de paquete a paquete de aplicación
3.) Que sea ejecutable: chmod + x acumulación -ffmpeg.sh
4.) Configure la variable NDK utilizada por el script, por ejemplo: export NDK =/home/user/android-ndk-r8b
5.) Ejecute el script:./build-ffmpeg.sh

Los archivos binarios compilados se ubicarán en la carpeta "final-compilaciones" recién creada en el directorio de trabajo actual. (Nota: el script crea binarios para las arquitecturas armeabi, armeabi-v7a y x86)

Espero que esto responda a su pregunta.

ACTUALIZACIÓN:

Si no se encuentra la escritura, http://sourceforge.net/p/servestream/code/HEAD/tree/ffmpeg/scripts/arm-build.sh

+0

Intenté esto y sigo teniendo "arm-linux-androideabi-gcc incapaz de crear un archivo ejecutable" Estoy ejecutando Ubuntu 12.10 64 bit, ffmpeg-1.0 y utilizando su script anterior. Por favor ayuda – JeffG

+0

Estoy usando 12.04 (64 bit) y la versión NDK r8b. Ese error generalmente ocurre cuando está usando una versión diferente de NDK. Si ese no es el caso, responda y trataré de ayudarlo a resolver el problema. –

+0

Oye, ¿puedes decirme cómo hacer que se ejecute en el entorno de Windows ... –

0

me ha dado un error similar (prueba de compilador de C no) al tratar de construir ffmpeg utilizando la versión 8d NDK y también R8b.

El problema que luego descubrí fue que la opción "Extraer aquí" en el último Ubuntu parece tener algún error. No extrae todo. Por lo tanto, usar extractos 'tar -jxf' correctamente y verá más ejecutables en la carpeta bin.

Puede consultar esto como referencia. http://code.google.com/p/android/issues/detail?id=41187

20

Finalmente encontré el problema con mi configuración al enfrentar este mismo problema ... Mirando el script arm-build.sh, comencé a seguir el guión. Observe la ruta "TOOLCHAIN ​​= ...".

Originalmente era el camino: cadena de herramientas = echo $NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/*-x86

Cuando fui a verificar existe este camino, me di cuenta de que no lo hizo. Creo que la razón es que tengo 64-bit compilación.

Mi camino es en realidad: .../cadenas de herramientas/arm-linux-androideabi-4.6/prebuilt/Linux x86_64-

Lo que terminé haciendo fue la copia de la carpeta, y cambiar el nombre a "linux- x86 "y ahora todo está compilando.

Espero que esto ayude a alguien!

+8

El mío fue/darwin-x86_64 en Mac OS X – user1132959

Cuestiones relacionadas