[FFmpeg-user] Configure error with Android NDK clang compiler

Davood Falahati d.falahati.1987 at ieee.org
Fri Jan 15 19:00:17 CET 2016


I have not compiled FFMPEG for android using toolchain, however, I had a
tough time doing the same with opencv-JNI. This question, asked in
stackoverflow might help you.
http://stackoverflow.com/questions/34246265/opencv-ann-mlp-training-in-android

I read your ndk building procedure, don't you point Application.mk and
Android.mk files to your toolchain? I mean $NDK-PATH/ndk-build ? Are you
using gradle?


Davood Falahati,

Isfahan University of Technology.
d.falahati.1987 at ieee.org

Every 3000 Sheets of paper costs us a tree.. Save trees... Conserve
Trees. Don't print this email or any files unless you really need to!

On Fri, Jan 15, 2016 at 2:21 AM, Marco Pracucci <marco.pracucci at spreaker.com
> wrote:

> I successfully build and run in production ffmpeg on Android (arm and x86)
> compiled with Android NDK's gcc. Recently, Android deprecated gcc and is
> pushing every dev to migrate to clang.
>
> I'm getting some issues while compiling ffmpeg with Android NDK's clang and
> this is the first one I encounter:
> *GNU assembler not found, install/update gas-preprocessor*
>
> Despite the message, looks that error is more subtle, because it fails
> while running "check_as" but if I run the same exact check command on the
> terminal, *it works*.
>
> Below you can find the full instructions to reproduce it (it fixes with
> --disable-asm but with gcc I'm able to compile with asm support).
>
> Versions:
> - ffmpeg 2.8.4
> - Compile on OSX 10.9.5
>
> *Download Android NDK*
> You can download the Android NDK from here:
> ‚Äčhttp://developer.android.com/ndk/downloads/index.html
>
> *Install Android NDK*
> Follow the installation instructions in the download and then set the
> environment variable NDK_DIR to the directory where you extracted the NDK.
>
> *Build NDK standalone toolchain*
> Define an environment variable TOOLCHAIN_DIR with the full path of the
> directory where the standalone toolchain should be installed. For example:
> export TOOLCHAIN_DIR=/tmp/toolchain
>
> Then build the toolchain:
> ${NDK_DIR}/build/tools/make-standalone-toolchain.sh \
> --toolchain=arm-linux-androideabi-clang3.6 \
> --platform=android-9 \
> --install-dir=${TOOLCHAIN_DIR}
>
> *Compile ffmpeg*
> I use the following configure script:
> ./configure \
> --enable-shared \
> --disable-static \
> --enable-gpl \
> --enable-version3 \
> --enable-nonfree \
> --disable-runtime-cpudetect \
> --disable-all \
> --disable-doc \
> --enable-avcodec \
> --enable-avformat \
> --enable-avutil \
> --enable-swresample \
> --disable-w32threads \
> --disable-os2threads \
> --disable-network \
> --disable-dxva2 \
> --disable-vaapi \
> --disable-vda \
> --disable-vdpau \
> --enable-protocol="file" \
> --enable-decoder="aac" \
> --enable-decoder="cook" \
> --enable-decoder="flac" \
> --enable-decoder="mp3" \
> --enable-decoder="mp3adu" \
> --enable-decoder="mp3adufloat" \
> --enable-decoder="mp3float" \
> --enable-decoder="mp3on4" \
> --enable-decoder="mp3on4float" \
> --enable-decoder="pcm_alaw" \
> --enable-decoder="pcm_bluray" \
> --enable-decoder="pcm_dvd" \
> --enable-decoder="pcm_f32be" \
> --enable-decoder="pcm_f32le" \
> --enable-decoder="pcm_f64be" \
> --enable-decoder="pcm_f64le" \
> --enable-decoder="pcm_lxf" \
> --enable-decoder="pcm_mulaw" \
> --enable-decoder="pcm_s16be" \
> --enable-decoder="pcm_s16be_planar" \
> --enable-decoder="pcm_s16le" \
> --enable-decoder="pcm_s16le_planar" \
> --enable-decoder="pcm_s24be" \
> --enable-decoder="pcm_s24daud" \
> --enable-decoder="pcm_s24le" \
> --enable-decoder="pcm_s24le_planar" \
> --enable-decoder="pcm_s32be" \
> --enable-decoder="pcm_s32le" \
> --enable-decoder="pcm_s32le_planar" \
> --enable-decoder="pcm_s8" \
> --enable-decoder="pcm_s8_planar" \
> --enable-decoder="pcm_u16be" \
> --enable-decoder="pcm_u16le" \
> --enable-decoder="pcm_u24be" \
> --enable-decoder="pcm_u24le" \
> --enable-decoder="pcm_u32be" \
> --enable-decoder="pcm_u32le" \
> --enable-decoder="pcm_u8" \
> --enable-decoder="pcm_zork" \
> --enable-decoder="ra_144" \
> --enable-decoder="ra_288" \
> --enable-decoder="ralf" \
> --enable-decoder="vorbis" \
> --enable-decoder="wmav1" \
> --enable-decoder="wmav2" \
> --enable-decoder="wmavoice" \
> --enable-decoder="wmalossless" \
> --enable-decoder="wmapro" \
> --enable-parser="aac" \
> --enable-parser="flac" \
> --enable-parser="mpegaudio" \
> --enable-parser="vorbis" \
> --enable-demuxer="aac" \
> --enable-demuxer="aiff" \
> --enable-demuxer="asf" \
> --enable-demuxer="flac" \
> --enable-demuxer="ogg" \
> --enable-demuxer="mp3" \
> --enable-demuxer="mov" \
> --enable-demuxer="pcm_alaw" \
> --enable-demuxer="pcm_f32be" \
> --enable-demuxer="pcm_f32le" \
> --enable-demuxer="pcm_f64be" \
> --enable-demuxer="pcm_f64le" \
> --enable-demuxer="pcm_mulaw" \
> --enable-demuxer="pcm_s16be" \
> --enable-demuxer="pcm_s16le" \
> --enable-demuxer="pcm_s24be" \
> --enable-demuxer="pcm_s24le" \
> --enable-demuxer="pcm_s32be" \
> --enable-demuxer="pcm_s32le" \
> --enable-demuxer="pcm_s8" \
> --enable-demuxer="pcm_u16be" \
> --enable-demuxer="pcm_u16le" \
> --enable-demuxer="pcm_u24be" \
> --enable-demuxer="pcm_u24le" \
> --enable-demuxer="pcm_u32be" \
> --enable-demuxer="pcm_u32le" \
> --enable-demuxer="rm" \
> --enable-demuxer="wav" \
> --enable-cross-compile \
> --toolchain=clang-usan \
> --cross-prefix=${TOOLCHAIN_DIR}/bin/arm-linux-androideabi- \
> --cc=${TOOLCHAIN_DIR}/bin/arm-linux-androideabi-clang \
> --cxx=${TOOLCHAIN_DIR}/bin/arm-linux-androideabi-clang \
> --sysroot=${TOOLCHAIN_DIR}/sysroot \
> --target-os=android \
> --extra-cflags="-I${TOOCHAIN_DIR}/sysroot/usr/include -ffast-math
> -funroll-loops -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" \
> --extra-ldflags="-L${TOOCHAIN_DIR}/sysroot/usr/lib" \
> --arch="arm" \
> --logfile="/tmp/ffmpeg.log"
>
> *The configure script fails with*:
> GNU assembler not found, install/update gas-preprocessor
>
> It fails while running check_as (extracted from the fail of ffmpeg.log):
> check_as
> BEGIN /var/folders/zn/45tzvzd15tnfvp4g5847x2dm0000gn/Tffconf.a7i3f9zc.S
>
> 1 .altmacro
> END /var/folders/zn/45tzvzd15tnfvp4g5847x2dm0000gn/Tffconf.a7i3f9zc.S
> /tmp/toolchain/bin/arm-linux-androideabi-clang
> --sysroot=/tmp/toolchain/sysroot -isysroot /tmp/toolchain/sysroot
> -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
> -Dstrtod=avpriv_strtod -DPIC -I/sysroot/usr/include -ffast-math
> -funroll-loops -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
> -march=armv7-a -fPIC -c -o
> /var/folders/zn/45tzvzd15tnfvp4g5847x2dm0000gn/Tffconf.Ct6YZsBn.o
> /var/folders/zn/45tzvzd15tnfvp4g5847x2dm0000gn/Tffconf.a7i3f9zc.S
> /var/folders/zn/45tzvzd15tnfvp4g5847x2dm0000gn/Tffconf.a7i3f9zc.S:1:1:
> error: unknown directive
> .altmacro
> GNU assembler not found, install/update gas-preprocessor
>
>
> The weird thing is that *if I create a file containing .altmacro and run
> the same exact command it actually works*. For example:
>
> $ echo ".altmacro" > test.as
> $ /tmp/toolchain/bin/arm-linux-androideabi-clang
> --sysroot=/tmp/toolchain/sysroot -isysroot /tmp/toolchain/sysroot
> -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
> -Dstrtod=avpriv_strtod -DPIC -I/sysroot/usr/include -ffast-math
> -funroll-loops -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
> -march=armv7-a -fPIC -c -o /tmp/test.o test.as
> $ echo $?
> 0
>
>
> After digging for an hour in the configure script I can't actually realize
> why it fails. Do you have any hint?
>
> Thank you,
> Marco
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>


More information about the ffmpeg-user mailing list